github.com/godaddy-x/freego@v1.0.156/utils/regular.go (about) 1 package utils 2 3 import ( 4 "bytes" 5 "regexp" 6 ) 7 8 const ( 9 MOBILE = "^1[3456789]\\d{9}$" // 手机号码 10 INTEGER = "^[\\-]?[1-9]+[0-9]*$|^[0]$" // 包含+-的自然数 11 FLOAT = "^[\\-]?[1-9]+[\\.][0-9]+$|^[\\-]?[0][\\.][0-9]+$" // 包含+-的浮点数 12 IPV4 = "^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$" // IPV4地址 13 EMAIL = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$" // 邮箱地址 14 ACCOUNT = "^[a-zA-Z][a-zA-Z0-9_]{5,14}$" // 账号格式 15 PASSWORD = "^.{6,18}$" // 密码格式 16 URL = "http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?$" // URL格式 17 IDNO = "(^\\d{18}$)|(^\\d{15}$)" // 身份证格式 18 PKNO = "^1([3-9]{1})([0-9]{17})$" // 主键ID格式 19 NUMBER = "(^[1-9]([0-9]{0,29})$)|(^(0){1}$)" // 自然数 20 NUMBER2 = "^[0-9]+$" // 纯数字 21 MONEY = "(^[1-9]([0-9]{0,10})$)" // 自然数金额格式 22 MONEY2 = "(^[1-9]([0-9]{0,12})?(\\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\\.[0-9]([0-9])?$)" // 包含+-自然数金额格式 23 MONEY3 = "(^(-)?[1-9]([0-9]{0,12})?(\\.[0-9]{1,2})?$)|(^(0){1}$)|(^(-)?[0-9]\\.[0-9]([0-9])?$)" // 包含+-的浮点数金额格式 24 ) 25 26 var ( 27 SPEL = regexp.MustCompile(`\$\{([^}]+)\}`) 28 ) 29 30 func IsPKNO(s interface{}) bool { 31 if v, b := s.(string); b { 32 return ValidPattern(v, PKNO) 33 } 34 if v, b := s.(int64); b { 35 return ValidPattern(AddStr(v), PKNO) 36 } 37 return false 38 } 39 40 func IsNumber(s string) bool { 41 return ValidPattern(s, NUMBER) 42 } 43 44 func IsNumber2(s string) bool { 45 return ValidPattern(s, NUMBER2) 46 } 47 48 // 分格式 49 func IsMoney(s string) bool { 50 return ValidPattern(s, MONEY) 51 } 52 53 // 常规浮点格式 54 func IsMoney2(s string) bool { 55 return ValidPattern(s, MONEY2) 56 } 57 58 func IsMoney3(s string) bool { 59 return ValidPattern(s, MONEY3) 60 } 61 62 func IsMobil(s string) bool { 63 return ValidPattern(s, MOBILE) 64 } 65 66 func IsIPV4(s string) bool { 67 return ValidPattern(s, IPV4) 68 } 69 70 func IsInt(s string) bool { 71 return ValidPattern(s, INTEGER) 72 } 73 74 func IsFloat(s string) bool { 75 return ValidPattern(s, FLOAT) 76 } 77 78 func IsEmail(s string) bool { 79 return ValidPattern(s, EMAIL) 80 } 81 82 func IsAccount(s string) bool { 83 return ValidPattern(s, ACCOUNT) 84 } 85 86 func IsPassword(s string) bool { 87 return ValidPattern(s, PASSWORD) 88 } 89 90 func IsIDNO(s string) bool { 91 return ValidPattern(s, IDNO) 92 } 93 94 func IsURL(s string) bool { 95 return ValidPattern(s, URL) 96 } 97 98 func ValidPattern(content, pattern string) bool { 99 r, _ := regexp.Compile(pattern) 100 return r.MatchString(content) 101 } 102 103 func FmtEL(msg string, values ...interface{}) (string, error) { 104 if len(values) == 0 { 105 return msg, nil 106 } 107 buffer := bytes.NewBufferString(msg) 108 for k, v := range values { 109 key := AddStr("${", k, "}") 110 bs := bytes.ReplaceAll(buffer.Bytes(), Str2Bytes(key), Str2Bytes(AnyToStr(v))) 111 buffer.Reset() 112 buffer.Write(bs) 113 } 114 msg = buffer.String() 115 buffer.Reset() 116 return msg, nil 117 }