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  }