github.com/profzone/eden-framework@v1.0.10/pkg/validate/validatetpl/string.go (about)

     1  package validatetpl
     2  
     3  import (
     4  	"fmt"
     5  	"regexp"
     6  	"unicode/utf8"
     7  )
     8  
     9  func NewValidateChar(min int, max int) func(v interface{}) (bool, string) {
    10  	return func(v interface{}) (bool, string) {
    11  		if stringer, ok := v.(fmt.Stringer); ok {
    12  			v = stringer.String()
    13  		}
    14  		if value, ok := v.(string); ok {
    15  			word_len := utf8.RuneCount([]byte(value))
    16  			if word_len < min || word_len > max {
    17  				return false, fmt.Sprintf(STRING_CHARS_NOT_IN_RANGE, min, max, word_len)
    18  			}
    19  			return true, ""
    20  		}
    21  		return false, TYPE_NOT_STRING
    22  	}
    23  }
    24  
    25  func NewValidateStringLength(min_len int, max_len int) func(v interface{}) (bool, string) {
    26  	return func(v interface{}) (bool, string) {
    27  		if stringer, ok := v.(fmt.Stringer); ok {
    28  			v = stringer.String()
    29  		}
    30  		if value, ok := v.(string); ok {
    31  			str_len := len(value)
    32  			if str_len < min_len || (str_len > max_len && max_len != STRING_UNLIMIT_VALUE) {
    33  				return false, fmt.Sprintf(STRING_LENGHT_NOT_IN_RANGE, min_len, max_len, str_len)
    34  			}
    35  			return true, ""
    36  		}
    37  		return false, TYPE_NOT_STRING
    38  	}
    39  }
    40  func NewValidateStringRegExp(reg *regexp.Regexp) func(v interface{}) (bool, string) {
    41  	return func(v interface{}) (bool, string) {
    42  		if stringer, ok := v.(fmt.Stringer); ok {
    43  			v = stringer.String()
    44  		}
    45  		if value, ok := v.(string); ok {
    46  			if !reg.MatchString(value) {
    47  				return false, fmt.Sprintf(STRING_NOT_MATCH_REGEXP, reg.String())
    48  			}
    49  			return true, ""
    50  		}
    51  		return false, TYPE_NOT_STRING
    52  	}
    53  }
    54  
    55  func NewEnumValidateString(enum_values ...string) func(v interface{}) (bool, string) {
    56  	return func(v interface{}) (bool, string) {
    57  		if stringer, ok := v.(fmt.Stringer); ok {
    58  			v = stringer.String()
    59  		}
    60  		value := fmt.Sprintf("%v", v)
    61  		for _, enum_value := range enum_values {
    62  			if value == enum_value {
    63  				return true, ""
    64  			}
    65  		}
    66  		return false, fmt.Sprintf(STRING_VALUE_NOT_IN_ENUM, enum_values, value)
    67  	}
    68  }