Serge Bazanski | cc25bdf | 2018-10-25 14:02:58 +0200 | [diff] [blame] | 1 | package govalidator |
| 2 | |
| 3 | import "regexp" |
| 4 | |
| 5 | // Basic regular expressions for validating strings |
| 6 | const ( |
| 7 | //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}])))\\.?$" |
| 8 | CreditCard string = "^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|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})$" |
| 9 | ISBN10 string = "^(?:[0-9]{9}X|[0-9]{10})$" |
| 10 | ISBN13 string = "^(?:[0-9]{13})$" |
| 11 | UUID3 string = "^[0-9a-f]{8}-[0-9a-f]{4}-3[0-9a-f]{3}-[0-9a-f]{4}-[0-9a-f]{12}$" |
| 12 | UUID4 string = "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$" |
| 13 | UUID5 string = "^[0-9a-f]{8}-[0-9a-f]{4}-5[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$" |
| 14 | UUID string = "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" |
| 15 | Alpha string = "^[a-zA-Z]+$" |
| 16 | Alphanumeric string = "^[a-zA-Z0-9]+$" |
| 17 | Numeric string = "^[0-9]+$" |
| 18 | Int string = "^(?:[-+]?(?:0|[1-9][0-9]*))$" |
| 19 | Float string = "^(?:[-+]?(?:[0-9]+))?(?:\\.[0-9]*)?(?:[eE][\\+\\-]?(?:[0-9]+))?$" |
| 20 | Hexadecimal string = "^[0-9a-fA-F]+$" |
| 21 | Hexcolor string = "^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$" |
| 22 | 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*\\)$" |
| 23 | ASCII string = "^[\x00-\x7F]+$" |
| 24 | Multibyte string = "[^\x00-\x7F]" |
| 25 | FullWidth string = "[^\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]" |
| 26 | HalfWidth string = "[\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]" |
| 27 | Base64 string = "^(?:[A-Za-z0-9+\\/]{4})*(?:[A-Za-z0-9+\\/]{2}==|[A-Za-z0-9+\\/]{3}=|[A-Za-z0-9+\\/]{4})$" |
| 28 | PrintableASCII string = "^[\x20-\x7E]+$" |
| 29 | DataURI string = "^data:.+\\/(.+);base64$" |
| 30 | Latitude string = "^[-+]?([1-8]?\\d(\\.\\d+)?|90(\\.0+)?)$" |
| 31 | Longitude string = "^[-+]?(180(\\.0+)?|((1[0-7]\\d)|([1-9]?\\d))(\\.\\d+)?)$" |
| 32 | 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})*[\._]?$` |
| 33 | 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]))` |
| 34 | URLSchema string = `((ftp|tcp|udp|wss?|https?):\/\/)` |
| 35 | URLUsername string = `(\S+(:\S*)?@)` |
| 36 | URLPath string = `((\/|\?|#)[^\s]*)` |
| 37 | URLPort string = `(:(\d{1,5}))` |
| 38 | URLIP string = `([1-9]\d?|1\d\d|2[01]\d|22[0-3])(\.(1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.([0-9]\d?|1\d\d|2[0-4]\d|25[0-4]))` |
| 39 | URLSubdomain string = `((www\.)|([a-zA-Z0-9]([-\.][-\._a-zA-Z0-9]+)*))` |
| 40 | URL string = `^` + 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 + `?$` |
| 41 | SSN string = `^\d{3}[- ]?\d{2}[- ]?\d{4}$` |
| 42 | WinPath string = `^[a-zA-Z]:\\(?:[^\\/:*?"<>|\r\n]+\\)*[^\\/:*?"<>|\r\n]*$` |
| 43 | UnixPath string = `^(/[^/\x00]*)+/?$` |
| 44 | 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-]+)*)?$" |
| 45 | tagName string = "valid" |
| 46 | hasLowerCase string = ".*[[:lower:]]" |
| 47 | hasUpperCase string = ".*[[:upper:]]" |
| 48 | ) |
| 49 | |
| 50 | // Used by IsFilePath func |
| 51 | const ( |
| 52 | // Unknown is unresolved OS type |
| 53 | Unknown = iota |
| 54 | // Win is Windows type |
| 55 | Win |
| 56 | // Unix is *nix OS types |
| 57 | Unix |
| 58 | ) |
| 59 | |
| 60 | var ( |
| 61 | userRegexp = regexp.MustCompile("^[a-zA-Z0-9!#$%&'*+/=?^_`{|}~.-]+$") |
| 62 | hostRegexp = regexp.MustCompile("^[^\\s]+\\.[^\\s]+$") |
| 63 | userDotRegexp = regexp.MustCompile("(^[.]{1})|([.]{1}$)|([.]{2,})") |
| 64 | //rxEmail = regexp.MustCompile(Email) |
| 65 | rxCreditCard = regexp.MustCompile(CreditCard) |
| 66 | rxISBN10 = regexp.MustCompile(ISBN10) |
| 67 | rxISBN13 = regexp.MustCompile(ISBN13) |
| 68 | rxUUID3 = regexp.MustCompile(UUID3) |
| 69 | rxUUID4 = regexp.MustCompile(UUID4) |
| 70 | rxUUID5 = regexp.MustCompile(UUID5) |
| 71 | rxUUID = regexp.MustCompile(UUID) |
| 72 | rxAlpha = regexp.MustCompile(Alpha) |
| 73 | rxAlphanumeric = regexp.MustCompile(Alphanumeric) |
| 74 | rxNumeric = regexp.MustCompile(Numeric) |
| 75 | rxInt = regexp.MustCompile(Int) |
| 76 | rxFloat = regexp.MustCompile(Float) |
| 77 | rxHexadecimal = regexp.MustCompile(Hexadecimal) |
| 78 | rxHexcolor = regexp.MustCompile(Hexcolor) |
| 79 | rxRGBcolor = regexp.MustCompile(RGBcolor) |
| 80 | rxASCII = regexp.MustCompile(ASCII) |
| 81 | rxPrintableASCII = regexp.MustCompile(PrintableASCII) |
| 82 | rxMultibyte = regexp.MustCompile(Multibyte) |
| 83 | rxFullWidth = regexp.MustCompile(FullWidth) |
| 84 | rxHalfWidth = regexp.MustCompile(HalfWidth) |
| 85 | rxBase64 = regexp.MustCompile(Base64) |
| 86 | rxDataURI = regexp.MustCompile(DataURI) |
| 87 | rxLatitude = regexp.MustCompile(Latitude) |
| 88 | rxLongitude = regexp.MustCompile(Longitude) |
| 89 | rxDNSName = regexp.MustCompile(DNSName) |
| 90 | rxURL = regexp.MustCompile(URL) |
| 91 | rxSSN = regexp.MustCompile(SSN) |
| 92 | rxWinPath = regexp.MustCompile(WinPath) |
| 93 | rxUnixPath = regexp.MustCompile(UnixPath) |
| 94 | rxSemver = regexp.MustCompile(Semver) |
| 95 | rxHasLowerCase = regexp.MustCompile(hasLowerCase) |
| 96 | rxHasUpperCase = regexp.MustCompile(hasUpperCase) |
| 97 | ) |