patterns.go 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package govalidator
  2. import "regexp"
  3. // Basic regular expressions for validating strings
  4. const (
  5. Email string = "^(((([a-zA-Z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])+(\\.([a-zA-Z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])|(\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-zA-Z]|\\d|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])|(([a-zA-Z]|\\d|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])([a-zA-Z]|\\d|-|\\.|_|~|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])*([a-zA-Z]|\\d|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])))\\.)+(([a-zA-Z]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])|(([a-zA-Z]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])([a-zA-Z]|\\d|-|_|~|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])*([a-zA-Z]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])))\\.?$"
  6. CreditCard string = "^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|(222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11}|6[27][0-9]{14})$"
  7. ISBN10 string = "^(?:[0-9]{9}X|[0-9]{10})$"
  8. ISBN13 string = "^(?:[0-9]{13})$"
  9. UUID3 string = "^[0-9a-f]{8}-[0-9a-f]{4}-3[0-9a-f]{3}-[0-9a-f]{4}-[0-9a-f]{12}$"
  10. UUID4 string = "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
  11. UUID5 string = "^[0-9a-f]{8}-[0-9a-f]{4}-5[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
  12. UUID string = "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
  13. Alpha string = "^[a-zA-Z]+$"
  14. Alphanumeric string = "^[a-zA-Z0-9]+$"
  15. Numeric string = "^[0-9]+$"
  16. Int string = "^(?:[-+]?(?:0|[1-9][0-9]*))$"
  17. Float string = "^(?:[-+]?(?:[0-9]+))?(?:\\.[0-9]*)?(?:[eE][\\+\\-]?(?:[0-9]+))?$"
  18. Hexadecimal string = "^[0-9a-fA-F]+$"
  19. Hexcolor string = "^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
  20. RGBcolor string = "^rgb\\(\\s*(0|[1-9]\\d?|1\\d\\d?|2[0-4]\\d|25[0-5])\\s*,\\s*(0|[1-9]\\d?|1\\d\\d?|2[0-4]\\d|25[0-5])\\s*,\\s*(0|[1-9]\\d?|1\\d\\d?|2[0-4]\\d|25[0-5])\\s*\\)$"
  21. ASCII string = "^[\x00-\x7F]+$"
  22. Multibyte string = "[^\x00-\x7F]"
  23. FullWidth string = "[^\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]"
  24. HalfWidth string = "[\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]"
  25. Base64 string = "^(?:[A-Za-z0-9+\\/]{4})*(?:[A-Za-z0-9+\\/]{2}==|[A-Za-z0-9+\\/]{3}=|[A-Za-z0-9+\\/]{4})$"
  26. PrintableASCII string = "^[\x20-\x7E]+$"
  27. DataURI string = "^data:.+\\/(.+);base64$"
  28. MagnetURI string = "^magnet:\\?xt=urn:[a-zA-Z0-9]+:[a-zA-Z0-9]{32,40}&dn=.+&tr=.+$"
  29. Latitude string = "^[-+]?([1-8]?\\d(\\.\\d+)?|90(\\.0+)?)$"
  30. Longitude string = "^[-+]?(180(\\.0+)?|((1[0-7]\\d)|([1-9]?\\d))(\\.\\d+)?)$"
  31. DNSName string = `^([a-zA-Z0-9_]{1}[a-zA-Z0-9_-]{0,62}){1}(\.[a-zA-Z0-9_]{1}[a-zA-Z0-9_-]{0,62})*[\._]?$`
  32. IP string = `(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))`
  33. URLSchema string = `((ftp|tcp|udp|wss?|https?):\/\/)`
  34. URLUsername string = `(\S+(:\S*)?@)`
  35. URLPath string = `((\/|\?|#)[^\s]*)`
  36. URLPort string = `(:(\d{1,5}))`
  37. URLIP string = `([1-9]\d?|1\d\d|2[01]\d|22[0-3]|24\d|25[0-5])(\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){2}(?:\.([0-9]\d?|1\d\d|2[0-4]\d|25[0-5]))`
  38. URLSubdomain string = `((www\.)|([a-zA-Z0-9]+([-_\.]?[a-zA-Z0-9])*[a-zA-Z0-9]\.[a-zA-Z0-9]+))`
  39. URL = `^` + URLSchema + `?` + URLUsername + `?` + `((` + URLIP + `|(\[` + IP + `\])|(([a-zA-Z0-9]([a-zA-Z0-9-_]+)?[a-zA-Z0-9]([-\.][a-zA-Z0-9]+)*)|(` + URLSubdomain + `?))?(([a-zA-Z\x{00a1}-\x{ffff}0-9]+-?-?)*[a-zA-Z\x{00a1}-\x{ffff}0-9]+)(?:\.([a-zA-Z\x{00a1}-\x{ffff}]{1,}))?))\.?` + URLPort + `?` + URLPath + `?$`
  40. SSN string = `^\d{3}[- ]?\d{2}[- ]?\d{4}$`
  41. WinPath string = `^[a-zA-Z]:\\(?:[^\\/:*?"<>|\r\n]+\\)*[^\\/:*?"<>|\r\n]*$`
  42. UnixPath string = `^(/[^/\x00]*)+/?$`
  43. Semver string = "^v?(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(-(0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(\\.(0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\\+[0-9a-zA-Z-]+(\\.[0-9a-zA-Z-]+)*)?$"
  44. tagName string = "valid"
  45. hasLowerCase string = ".*[[:lower:]]"
  46. hasUpperCase string = ".*[[:upper:]]"
  47. hasWhitespace string = ".*[[:space:]]"
  48. hasWhitespaceOnly string = "^[[:space:]]+$"
  49. IMEI string = "^[0-9a-f]{14}$|^\\d{15}$|^\\d{18}$"
  50. IMSI string = "^\\d{14,15}$"
  51. )
  52. // Used by IsFilePath func
  53. const (
  54. // Unknown is unresolved OS type
  55. Unknown = iota
  56. // Win is Windows type
  57. Win
  58. // Unix is *nix OS types
  59. Unix
  60. )
  61. var (
  62. userRegexp = regexp.MustCompile("^[a-zA-Z0-9!#$%&'*+/=?^_`{|}~.-]+$")
  63. hostRegexp = regexp.MustCompile("^[^\\s]+\\.[^\\s]+$")
  64. userDotRegexp = regexp.MustCompile("(^[.]{1})|([.]{1}$)|([.]{2,})")
  65. rxEmail = regexp.MustCompile(Email)
  66. rxCreditCard = regexp.MustCompile(CreditCard)
  67. rxISBN10 = regexp.MustCompile(ISBN10)
  68. rxISBN13 = regexp.MustCompile(ISBN13)
  69. rxUUID3 = regexp.MustCompile(UUID3)
  70. rxUUID4 = regexp.MustCompile(UUID4)
  71. rxUUID5 = regexp.MustCompile(UUID5)
  72. rxUUID = regexp.MustCompile(UUID)
  73. rxAlpha = regexp.MustCompile(Alpha)
  74. rxAlphanumeric = regexp.MustCompile(Alphanumeric)
  75. rxNumeric = regexp.MustCompile(Numeric)
  76. rxInt = regexp.MustCompile(Int)
  77. rxFloat = regexp.MustCompile(Float)
  78. rxHexadecimal = regexp.MustCompile(Hexadecimal)
  79. rxHexcolor = regexp.MustCompile(Hexcolor)
  80. rxRGBcolor = regexp.MustCompile(RGBcolor)
  81. rxASCII = regexp.MustCompile(ASCII)
  82. rxPrintableASCII = regexp.MustCompile(PrintableASCII)
  83. rxMultibyte = regexp.MustCompile(Multibyte)
  84. rxFullWidth = regexp.MustCompile(FullWidth)
  85. rxHalfWidth = regexp.MustCompile(HalfWidth)
  86. rxBase64 = regexp.MustCompile(Base64)
  87. rxDataURI = regexp.MustCompile(DataURI)
  88. rxMagnetURI = regexp.MustCompile(MagnetURI)
  89. rxLatitude = regexp.MustCompile(Latitude)
  90. rxLongitude = regexp.MustCompile(Longitude)
  91. rxDNSName = regexp.MustCompile(DNSName)
  92. rxURL = regexp.MustCompile(URL)
  93. rxSSN = regexp.MustCompile(SSN)
  94. rxWinPath = regexp.MustCompile(WinPath)
  95. rxUnixPath = regexp.MustCompile(UnixPath)
  96. rxSemver = regexp.MustCompile(Semver)
  97. rxHasLowerCase = regexp.MustCompile(hasLowerCase)
  98. rxHasUpperCase = regexp.MustCompile(hasUpperCase)
  99. rxHasWhitespace = regexp.MustCompile(hasWhitespace)
  100. rxHasWhitespaceOnly = regexp.MustCompile(hasWhitespaceOnly)
  101. rxIMEI = regexp.MustCompile(IMEI)
  102. rxIMSI = regexp.MustCompile(IMSI)
  103. )