Files
exchange_go/pkg/utility/regexhelper.go
2025-02-06 11:14:33 +08:00

113 lines
3.3 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package utility
import (
"regexp"
)
var (
emailRegexp, _ = regexp.Compile("(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$)")
)
// ValidateEmail 验证邮箱
func ValidateEmail(email string) bool {
// userName := "[a-zA-Z0-9][a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]{0,62}[a-zA-Z0-9]"
// domainName := "[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,253}[a-zA-Z0-9])?"
// topLevelDomainName := "(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*"
// pattern := "^" + userName + "@" + domainName + topLevelDomainName + "$"
// reg := regexp.MustCompile(pattern)
// match := reg.MatchString(email)
match := emailRegexp.MatchString(email)
return match
}
// ValidatePhoneNumber 手机号码验证,+91-9819882936
//
// 1. Mobile Number
// - Starts with 6,7,8,8
// - 10 digit
// - Prexix can be +91, 0
//
// 2. LandLine Number
// - {area-code}-{local number}
// - 10 digit number
// - area codes range from 2-digits to 4-digits
// - ex. 02321-238200
func ValidatePhoneNumber(num string) bool {
prefixMobileNum := `(?:(?:\+|0{0,2})91([\s-])?|[0]?)?`
mobileNum := `[6-9]\d{9}`
landLineNum := `((0)?(([1-9]\d{1}-\d{8})|([1-9]\d{2}-\d{7})|([1-9]\d{3}-\d{6})))`
pattern := "^(" + "(" + prefixMobileNum + mobileNum + ")" + "|" + landLineNum + ")$"
reg := regexp.MustCompile(pattern)
match := reg.MatchString(num)
return match
}
// ValidatePhoneForeign 外国手机
func ValidatePhoneForeign(phone string) bool {
reg, err := regexp.MatchString("^[0-9]{7}$", phone)
if err != nil {
return false
}
return reg
}
// IsMobileChina 中国手机验证
func IsMobileChina(phone string) bool {
// reg, err := regexp.MatchString("^[0-9]{11}$", phone)
reg, err := regexp.MatchString("^(13[0-9]|14[0-9]|15[0-9]|17[0-9]|18[0-9]|19[0-9])\\d{8}$", phone)
if err != nil {
return false
}
return reg
}
// ReturnEmail 替换邮箱中间几位为*号
func ReturnEmail(email string) string {
if len(email) == 0 {
return ""
}
re, _ := regexp.Compile("(\\w?)(\\w+)(\\w)(@\\w+\\.[a-z]+(\\.[a-z]+)?)")
return re.ReplaceAllString(email, "$1****$3$4")
}
// ReturnPhoneNO 替换手机号中间四位为*
func ReturnPhoneNO(phone string) string {
if len(phone) == 0 {
return ""
}
re, _ := regexp.Compile("(\\d{3})(\\d{4})(\\d{4})")
return re.ReplaceAllString(phone, "$1****$3")
}
// CheckPasswordOk
// 密码长度minLength-maxLength位可使用字母、数字、符号组成区分大小写至少包含两种
// minLength: 指定密码的最小长度
// maxLength指定密码的最大长度
// pwd明文密码
func CheckPasswordOk(minLength, maxLength int, pwd string) bool {
if len(pwd) < minLength {
return false // fmt.Errorf("BAD PASSWORD: The password is shorter than %d characters", minLength)
}
if len(pwd) > maxLength {
return false // fmt.Errorf("BAD PASSWORD: The password is logner than %d characters", maxLength)
}
// patternList := []string{`[0-9]+`, `[a-z]+`, `[A-Z]+`, `[~!@#$%^&*?_-]+`}
isNum, _ := regexp.MatchString(`[0-9]+`, pwd)
isLower, _ := regexp.MatchString(`[a-z]+`, pwd)
isUpper, _ := regexp.MatchString(`[A-Z]+`, pwd)
//isSpe, _ := regexp.MatchString(`[~!@#$%^&*?_-]+`, pwd)
return isNum && isLower && isUpper
}
// IsAccountTwo 用户账号验证
func IsAccountTwo(phone string) bool {
// reg, err := regexp.MatchString("^[0-9]{11}$", phone)
reg, err := regexp.MatchString("^[A-Za-z\\d]{6,12}$", phone)
if err != nil {
return false
}
return reg
}