/cluster-autoscaler/vendor/github.com/go-ozzo/ozzo-validation/is/rules.go

https://github.com/kubernetes/autoscaler · Go · 171 lines · 95 code · 13 blank · 63 comment · 5 complexity · fcb2cf6468906780c6199fa2682966ba MD5 · raw file

  1. // Copyright 2016 Qiang Xue. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. // Package is provides a list of commonly used string validation rules.
  5. package is
  6. import (
  7. "regexp"
  8. "unicode"
  9. "github.com/asaskevich/govalidator"
  10. "github.com/go-ozzo/ozzo-validation"
  11. )
  12. var (
  13. // Email validates if a string is an email or not.
  14. Email = validation.NewStringRule(govalidator.IsEmail, "must be a valid email address")
  15. // URL validates if a string is a valid URL
  16. URL = validation.NewStringRule(govalidator.IsURL, "must be a valid URL")
  17. // RequestURL validates if a string is a valid request URL
  18. RequestURL = validation.NewStringRule(govalidator.IsRequestURL, "must be a valid request URL")
  19. // RequestURI validates if a string is a valid request URI
  20. RequestURI = validation.NewStringRule(govalidator.IsRequestURI, "must be a valid request URI")
  21. // Alpha validates if a string contains English letters only (a-zA-Z)
  22. Alpha = validation.NewStringRule(govalidator.IsAlpha, "must contain English letters only")
  23. // Digit validates if a string contains digits only (0-9)
  24. Digit = validation.NewStringRule(isDigit, "must contain digits only")
  25. // Alphanumeric validates if a string contains English letters and digits only (a-zA-Z0-9)
  26. Alphanumeric = validation.NewStringRule(govalidator.IsAlphanumeric, "must contain English letters and digits only")
  27. // UTFLetter validates if a string contains unicode letters only
  28. UTFLetter = validation.NewStringRule(govalidator.IsUTFLetter, "must contain unicode letter characters only")
  29. // UTFDigit validates if a string contains unicode decimal digits only
  30. UTFDigit = validation.NewStringRule(govalidator.IsUTFDigit, "must contain unicode decimal digits only")
  31. // UTFLetterNumeric validates if a string contains unicode letters and numbers only
  32. UTFLetterNumeric = validation.NewStringRule(govalidator.IsUTFLetterNumeric, "must contain unicode letters and numbers only")
  33. // UTFNumeric validates if a string contains unicode number characters (category N) only
  34. UTFNumeric = validation.NewStringRule(isUTFNumeric, "must contain unicode number characters only")
  35. // LowerCase validates if a string contains lower case unicode letters only
  36. LowerCase = validation.NewStringRule(govalidator.IsLowerCase, "must be in lower case")
  37. // UpperCase validates if a string contains upper case unicode letters only
  38. UpperCase = validation.NewStringRule(govalidator.IsUpperCase, "must be in upper case")
  39. // Hexadecimal validates if a string is a valid hexadecimal number
  40. Hexadecimal = validation.NewStringRule(govalidator.IsHexadecimal, "must be a valid hexadecimal number")
  41. // HexColor validates if a string is a valid hexadecimal color code
  42. HexColor = validation.NewStringRule(govalidator.IsHexcolor, "must be a valid hexadecimal color code")
  43. // RGBColor validates if a string is a valid RGB color in the form of rgb(R, G, B)
  44. RGBColor = validation.NewStringRule(govalidator.IsRGBcolor, "must be a valid RGB color code")
  45. // Int validates if a string is a valid integer number
  46. Int = validation.NewStringRule(govalidator.IsInt, "must be an integer number")
  47. // Float validates if a string is a floating point number
  48. Float = validation.NewStringRule(govalidator.IsFloat, "must be a floating point number")
  49. // UUIDv3 validates if a string is a valid version 3 UUID
  50. UUIDv3 = validation.NewStringRule(govalidator.IsUUIDv3, "must be a valid UUID v3")
  51. // UUIDv4 validates if a string is a valid version 4 UUID
  52. UUIDv4 = validation.NewStringRule(govalidator.IsUUIDv4, "must be a valid UUID v4")
  53. // UUIDv5 validates if a string is a valid version 5 UUID
  54. UUIDv5 = validation.NewStringRule(govalidator.IsUUIDv5, "must be a valid UUID v5")
  55. // UUID validates if a string is a valid UUID
  56. UUID = validation.NewStringRule(govalidator.IsUUID, "must be a valid UUID")
  57. // CreditCard validates if a string is a valid credit card number
  58. CreditCard = validation.NewStringRule(govalidator.IsCreditCard, "must be a valid credit card number")
  59. // ISBN10 validates if a string is an ISBN version 10
  60. ISBN10 = validation.NewStringRule(govalidator.IsISBN10, "must be a valid ISBN-10")
  61. // ISBN13 validates if a string is an ISBN version 13
  62. ISBN13 = validation.NewStringRule(govalidator.IsISBN13, "must be a valid ISBN-13")
  63. // ISBN validates if a string is an ISBN (either version 10 or 13)
  64. ISBN = validation.NewStringRule(isISBN, "must be a valid ISBN")
  65. // JSON validates if a string is in valid JSON format
  66. JSON = validation.NewStringRule(govalidator.IsJSON, "must be in valid JSON format")
  67. // ASCII validates if a string contains ASCII characters only
  68. ASCII = validation.NewStringRule(govalidator.IsASCII, "must contain ASCII characters only")
  69. // PrintableASCII validates if a string contains printable ASCII characters only
  70. PrintableASCII = validation.NewStringRule(govalidator.IsPrintableASCII, "must contain printable ASCII characters only")
  71. // Multibyte validates if a string contains multibyte characters
  72. Multibyte = validation.NewStringRule(govalidator.IsMultibyte, "must contain multibyte characters")
  73. // FullWidth validates if a string contains full-width characters
  74. FullWidth = validation.NewStringRule(govalidator.IsFullWidth, "must contain full-width characters")
  75. // HalfWidth validates if a string contains half-width characters
  76. HalfWidth = validation.NewStringRule(govalidator.IsHalfWidth, "must contain half-width characters")
  77. // VariableWidth validates if a string contains both full-width and half-width characters
  78. VariableWidth = validation.NewStringRule(govalidator.IsVariableWidth, "must contain both full-width and half-width characters")
  79. // Base64 validates if a string is encoded in Base64
  80. Base64 = validation.NewStringRule(govalidator.IsBase64, "must be encoded in Base64")
  81. // DataURI validates if a string is a valid base64-encoded data URI
  82. DataURI = validation.NewStringRule(govalidator.IsDataURI, "must be a Base64-encoded data URI")
  83. // E164 validates if a string is a valid ISO3166 Alpha 2 country code
  84. E164 = validation.NewStringRule(isE164Number, "must be a valid E164 number")
  85. // CountryCode2 validates if a string is a valid ISO3166 Alpha 2 country code
  86. CountryCode2 = validation.NewStringRule(govalidator.IsISO3166Alpha2, "must be a valid two-letter country code")
  87. // CountryCode3 validates if a string is a valid ISO3166 Alpha 3 country code
  88. CountryCode3 = validation.NewStringRule(govalidator.IsISO3166Alpha3, "must be a valid three-letter country code")
  89. // DialString validates if a string is a valid dial string that can be passed to Dial()
  90. DialString = validation.NewStringRule(govalidator.IsDialString, "must be a valid dial string")
  91. // MAC validates if a string is a MAC address
  92. MAC = validation.NewStringRule(govalidator.IsMAC, "must be a valid MAC address")
  93. // IP validates if a string is a valid IP address (either version 4 or 6)
  94. IP = validation.NewStringRule(govalidator.IsIP, "must be a valid IP address")
  95. // IPv4 validates if a string is a valid version 4 IP address
  96. IPv4 = validation.NewStringRule(govalidator.IsIPv4, "must be a valid IPv4 address")
  97. // IPv6 validates if a string is a valid version 6 IP address
  98. IPv6 = validation.NewStringRule(govalidator.IsIPv6, "must be a valid IPv6 address")
  99. // Subdomain validates if a string is valid subdomain
  100. Subdomain = validation.NewStringRule(isSubdomain, "must be a valid subdomain")
  101. // Domain validates if a string is valid domain
  102. Domain = validation.NewStringRule(isDomain, "must be a valid domain")
  103. // DNSName validates if a string is valid DNS name
  104. DNSName = validation.NewStringRule(govalidator.IsDNSName, "must be a valid DNS name")
  105. // Host validates if a string is a valid IP (both v4 and v6) or a valid DNS name
  106. Host = validation.NewStringRule(govalidator.IsHost, "must be a valid IP address or DNS name")
  107. // Port validates if a string is a valid port number
  108. Port = validation.NewStringRule(govalidator.IsPort, "must be a valid port number")
  109. // MongoID validates if a string is a valid Mongo ID
  110. MongoID = validation.NewStringRule(govalidator.IsMongoID, "must be a valid hex-encoded MongoDB ObjectId")
  111. // Latitude validates if a string is a valid latitude
  112. Latitude = validation.NewStringRule(govalidator.IsLatitude, "must be a valid latitude")
  113. // Longitude validates if a string is a valid longitude
  114. Longitude = validation.NewStringRule(govalidator.IsLongitude, "must be a valid longitude")
  115. // SSN validates if a string is a social security number (SSN)
  116. SSN = validation.NewStringRule(govalidator.IsSSN, "must be a valid social security number")
  117. // Semver validates if a string is a valid semantic version
  118. Semver = validation.NewStringRule(govalidator.IsSemver, "must be a valid semantic version")
  119. )
  120. var (
  121. reDigit = regexp.MustCompile("^[0-9]+$")
  122. // Subdomain regex source: https://stackoverflow.com/a/7933253
  123. reSubdomain = regexp.MustCompile(`^[A-Za-z0-9](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?$`)
  124. )
  125. func isISBN(value string) bool {
  126. return govalidator.IsISBN(value, 10) || govalidator.IsISBN(value, 13)
  127. }
  128. func isDigit(value string) bool {
  129. return reDigit.MatchString(value)
  130. }
  131. func isE164Number(value string) bool {
  132. // E164 regex source: https://stackoverflow.com/a/23299989
  133. reE164 := regexp.MustCompile(`^\+?[1-9]\d{1,14}$`)
  134. return reE164.MatchString(value)
  135. }
  136. func isSubdomain(value string) bool {
  137. // Subdomain regex source: https://stackoverflow.com/a/7933253
  138. reSubdomain := regexp.MustCompile(`^[A-Za-z0-9](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?$`)
  139. return reSubdomain.MatchString(value)
  140. }
  141. func isDomain(value string) bool {
  142. if len(value) > 255 {
  143. return false
  144. }
  145. // Domain regex source: https://stackoverflow.com/a/7933253
  146. // Slightly modified: Removed 255 max length validation since Go regex does not
  147. // support lookarounds. More info: https://stackoverflow.com/a/38935027
  148. reDomain := regexp.MustCompile(`^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+(?:[a-z]{1,63}| xn--[a-z0-9]{1,59})$`)
  149. return reDomain.MatchString(value)
  150. }
  151. func isUTFNumeric(value string) bool {
  152. for _, c := range value {
  153. if unicode.IsNumber(c) == false {
  154. return false
  155. }
  156. }
  157. return true
  158. }