regexes.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package validator
  2. import "regexp"
  3. const (
  4. alphaRegexString = "^[a-zA-Z]+$"
  5. alphaNumericRegexString = "^[a-zA-Z0-9]+$"
  6. alphaUnicodeRegexString = "^[\\p{L}]+$"
  7. alphaUnicodeNumericRegexString = "^[\\p{L}\\p{N}]+$"
  8. numericRegexString = "^[-+]?[0-9]+(?:\\.[0-9]+)?$"
  9. numberRegexString = "^[0-9]+$"
  10. hexadecimalRegexString = "^(0[xX])?[0-9a-fA-F]+$"
  11. hexColorRegexString = "^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$"
  12. rgbRegexString = "^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])|(?: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*\\)$"
  13. rgbaRegexString = "^rgba\\(\\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])|(?: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*,\\s*(?:(?:0.[1-9]*)|[01])\\s*\\)$"
  14. hslRegexString = "^hsl\\(\\s*(?:0|[1-9]\\d?|[12]\\d\\d|3[0-5]\\d|360)\\s*,\\s*(?:(?:0|[1-9]\\d?|100)%)\\s*,\\s*(?:(?:0|[1-9]\\d?|100)%)\\s*\\)$"
  15. hslaRegexString = "^hsla\\(\\s*(?:0|[1-9]\\d?|[12]\\d\\d|3[0-5]\\d|360)\\s*,\\s*(?:(?:0|[1-9]\\d?|100)%)\\s*,\\s*(?:(?:0|[1-9]\\d?|100)%)\\s*,\\s*(?:(?:0.[1-9]*)|[01])\\s*\\)$"
  16. emailRegexString = "^(?:(?:(?:(?:[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}])))\\.?$"
  17. e164RegexString = "^\\+[1-9]?[0-9]{7,14}$"
  18. base64RegexString = "^(?:[A-Za-z0-9+\\/]{4})*(?:[A-Za-z0-9+\\/]{2}==|[A-Za-z0-9+\\/]{3}=|[A-Za-z0-9+\\/]{4})$"
  19. base64URLRegexString = "^(?:[A-Za-z0-9-_]{4})*(?:[A-Za-z0-9-_]{2}==|[A-Za-z0-9-_]{3}=|[A-Za-z0-9-_]{4})$"
  20. iSBN10RegexString = "^(?:[0-9]{9}X|[0-9]{10})$"
  21. iSBN13RegexString = "^(?:(?:97(?:8|9))[0-9]{10})$"
  22. uUID3RegexString = "^[0-9a-f]{8}-[0-9a-f]{4}-3[0-9a-f]{3}-[0-9a-f]{4}-[0-9a-f]{12}$"
  23. uUID4RegexString = "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
  24. uUID5RegexString = "^[0-9a-f]{8}-[0-9a-f]{4}-5[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
  25. uUIDRegexString = "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
  26. uUID3RFC4122RegexString = "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-3[0-9a-fA-F]{3}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
  27. uUID4RFC4122RegexString = "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
  28. uUID5RFC4122RegexString = "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-5[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
  29. uUIDRFC4122RegexString = "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
  30. uLIDRegexString = "^[A-HJKMNP-TV-Z0-9]{26}$"
  31. md4RegexString = "^[0-9a-f]{32}$"
  32. md5RegexString = "^[0-9a-f]{32}$"
  33. sha256RegexString = "^[0-9a-f]{64}$"
  34. sha384RegexString = "^[0-9a-f]{96}$"
  35. sha512RegexString = "^[0-9a-f]{128}$"
  36. ripemd128RegexString = "^[0-9a-f]{32}$"
  37. ripemd160RegexString = "^[0-9a-f]{40}$"
  38. tiger128RegexString = "^[0-9a-f]{32}$"
  39. tiger160RegexString = "^[0-9a-f]{40}$"
  40. tiger192RegexString = "^[0-9a-f]{48}$"
  41. aSCIIRegexString = "^[\x00-\x7F]*$"
  42. printableASCIIRegexString = "^[\x20-\x7E]*$"
  43. multibyteRegexString = "[^\x00-\x7F]"
  44. dataURIRegexString = `^data:((?:\w+\/(?:([^;]|;[^;]).)+)?)`
  45. latitudeRegexString = "^[-+]?([1-8]?\\d(\\.\\d+)?|90(\\.0+)?)$"
  46. longitudeRegexString = "^[-+]?(180(\\.0+)?|((1[0-7]\\d)|([1-9]?\\d))(\\.\\d+)?)$"
  47. sSNRegexString = `^[0-9]{3}[ -]?(0[1-9]|[1-9][0-9])[ -]?([1-9][0-9]{3}|[0-9][1-9][0-9]{2}|[0-9]{2}[1-9][0-9]|[0-9]{3}[1-9])$`
  48. hostnameRegexStringRFC952 = `^[a-zA-Z]([a-zA-Z0-9\-]+[\.]?)*[a-zA-Z0-9]$` // https://tools.ietf.org/html/rfc952
  49. hostnameRegexStringRFC1123 = `^([a-zA-Z0-9]{1}[a-zA-Z0-9-]{0,62}){1}(\.[a-zA-Z0-9]{1}[a-zA-Z0-9-]{0,62})*?$` // accepts hostname starting with a digit https://tools.ietf.org/html/rfc1123
  50. fqdnRegexStringRFC1123 = `^([a-zA-Z0-9]{1}[a-zA-Z0-9-]{0,62})(\.[a-zA-Z0-9]{1}[a-zA-Z0-9-]{0,62})*?(\.[a-zA-Z]{1}[a-zA-Z0-9]{0,62})\.?$` // same as hostnameRegexStringRFC1123 but must contain a non numerical TLD (possibly ending with '.')
  51. btcAddressRegexString = `^[13][a-km-zA-HJ-NP-Z1-9]{25,34}$` // bitcoin address
  52. btcAddressUpperRegexStringBech32 = `^BC1[02-9AC-HJ-NP-Z]{7,76}$` // bitcoin bech32 address https://en.bitcoin.it/wiki/Bech32
  53. btcAddressLowerRegexStringBech32 = `^bc1[02-9ac-hj-np-z]{7,76}$` // bitcoin bech32 address https://en.bitcoin.it/wiki/Bech32
  54. ethAddressRegexString = `^0x[0-9a-fA-F]{40}$`
  55. ethAddressUpperRegexString = `^0x[0-9A-F]{40}$`
  56. ethAddressLowerRegexString = `^0x[0-9a-f]{40}$`
  57. uRLEncodedRegexString = `^(?:[^%]|%[0-9A-Fa-f]{2})*$`
  58. hTMLEncodedRegexString = `&#[x]?([0-9a-fA-F]{2})|(&gt)|(&lt)|(&quot)|(&amp)+[;]?`
  59. hTMLRegexString = `<[/]?([a-zA-Z]+).*?>`
  60. jWTRegexString = "^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$"
  61. splitParamsRegexString = `'[^']*'|\S+`
  62. bicRegexString = `^[A-Za-z]{6}[A-Za-z0-9]{2}([A-Za-z0-9]{3})?$`
  63. semverRegexString = `^(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-]+)*))?$` // numbered capture groups https://semver.org/
  64. dnsRegexStringRFC1035Label = "^[a-z]([-a-z0-9]*[a-z0-9]){0,62}$"
  65. )
  66. var (
  67. alphaRegex = regexp.MustCompile(alphaRegexString)
  68. alphaNumericRegex = regexp.MustCompile(alphaNumericRegexString)
  69. alphaUnicodeRegex = regexp.MustCompile(alphaUnicodeRegexString)
  70. alphaUnicodeNumericRegex = regexp.MustCompile(alphaUnicodeNumericRegexString)
  71. numericRegex = regexp.MustCompile(numericRegexString)
  72. numberRegex = regexp.MustCompile(numberRegexString)
  73. hexadecimalRegex = regexp.MustCompile(hexadecimalRegexString)
  74. hexColorRegex = regexp.MustCompile(hexColorRegexString)
  75. rgbRegex = regexp.MustCompile(rgbRegexString)
  76. rgbaRegex = regexp.MustCompile(rgbaRegexString)
  77. hslRegex = regexp.MustCompile(hslRegexString)
  78. hslaRegex = regexp.MustCompile(hslaRegexString)
  79. e164Regex = regexp.MustCompile(e164RegexString)
  80. emailRegex = regexp.MustCompile(emailRegexString)
  81. base64Regex = regexp.MustCompile(base64RegexString)
  82. base64URLRegex = regexp.MustCompile(base64URLRegexString)
  83. iSBN10Regex = regexp.MustCompile(iSBN10RegexString)
  84. iSBN13Regex = regexp.MustCompile(iSBN13RegexString)
  85. uUID3Regex = regexp.MustCompile(uUID3RegexString)
  86. uUID4Regex = regexp.MustCompile(uUID4RegexString)
  87. uUID5Regex = regexp.MustCompile(uUID5RegexString)
  88. uUIDRegex = regexp.MustCompile(uUIDRegexString)
  89. uUID3RFC4122Regex = regexp.MustCompile(uUID3RFC4122RegexString)
  90. uUID4RFC4122Regex = regexp.MustCompile(uUID4RFC4122RegexString)
  91. uUID5RFC4122Regex = regexp.MustCompile(uUID5RFC4122RegexString)
  92. uUIDRFC4122Regex = regexp.MustCompile(uUIDRFC4122RegexString)
  93. uLIDRegex = regexp.MustCompile(uLIDRegexString)
  94. md4Regex = regexp.MustCompile(md4RegexString)
  95. md5Regex = regexp.MustCompile(md5RegexString)
  96. sha256Regex = regexp.MustCompile(sha256RegexString)
  97. sha384Regex = regexp.MustCompile(sha384RegexString)
  98. sha512Regex = regexp.MustCompile(sha512RegexString)
  99. ripemd128Regex = regexp.MustCompile(ripemd128RegexString)
  100. ripemd160Regex = regexp.MustCompile(ripemd160RegexString)
  101. tiger128Regex = regexp.MustCompile(tiger128RegexString)
  102. tiger160Regex = regexp.MustCompile(tiger160RegexString)
  103. tiger192Regex = regexp.MustCompile(tiger192RegexString)
  104. aSCIIRegex = regexp.MustCompile(aSCIIRegexString)
  105. printableASCIIRegex = regexp.MustCompile(printableASCIIRegexString)
  106. multibyteRegex = regexp.MustCompile(multibyteRegexString)
  107. dataURIRegex = regexp.MustCompile(dataURIRegexString)
  108. latitudeRegex = regexp.MustCompile(latitudeRegexString)
  109. longitudeRegex = regexp.MustCompile(longitudeRegexString)
  110. sSNRegex = regexp.MustCompile(sSNRegexString)
  111. hostnameRegexRFC952 = regexp.MustCompile(hostnameRegexStringRFC952)
  112. hostnameRegexRFC1123 = regexp.MustCompile(hostnameRegexStringRFC1123)
  113. fqdnRegexRFC1123 = regexp.MustCompile(fqdnRegexStringRFC1123)
  114. btcAddressRegex = regexp.MustCompile(btcAddressRegexString)
  115. btcUpperAddressRegexBech32 = regexp.MustCompile(btcAddressUpperRegexStringBech32)
  116. btcLowerAddressRegexBech32 = regexp.MustCompile(btcAddressLowerRegexStringBech32)
  117. ethAddressRegex = regexp.MustCompile(ethAddressRegexString)
  118. ethAddressRegexUpper = regexp.MustCompile(ethAddressUpperRegexString)
  119. ethAddressRegexLower = regexp.MustCompile(ethAddressLowerRegexString)
  120. uRLEncodedRegex = regexp.MustCompile(uRLEncodedRegexString)
  121. hTMLEncodedRegex = regexp.MustCompile(hTMLEncodedRegexString)
  122. hTMLRegex = regexp.MustCompile(hTMLRegexString)
  123. jWTRegex = regexp.MustCompile(jWTRegexString)
  124. splitParamsRegex = regexp.MustCompile(splitParamsRegexString)
  125. bicRegex = regexp.MustCompile(bicRegexString)
  126. semverRegex = regexp.MustCompile(semverRegexString)
  127. dnsRegexRFC1035Label = regexp.MustCompile(dnsRegexStringRFC1035Label)
  128. )