Skip to content

Commit 374724a

Browse files
authored
Merge branch 'master' into patch-1
2 parents 9926f9e + 5773869 commit 374724a

File tree

14 files changed

+413
-47
lines changed

14 files changed

+413
-47
lines changed

README.md

Lines changed: 15 additions & 9 deletions
Large diffs are not rendered by default.

src/lib/alpha.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export const alpha = {
88
'el-GR': /^[Α-ώ]+$/i,
99
'es-ES': /^[A-ZÁÉÍÑÓÚÜ]+$/i,
1010
'fa-IR': /^[ابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی]+$/i,
11+
'fi-FI': /^[A-ZÅÄÖ]+$/i,
1112
'fr-FR': /^[A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/i,
1213
'it-IT': /^[A-ZÀÉÈÌÎÓÒÙ]+$/i,
1314
'nb-NO': /^[A-ZÆØÅ]+$/i,
@@ -42,6 +43,7 @@ export const alphanumeric = {
4243
'de-DE': /^[0-9A-ZÄÖÜß]+$/i,
4344
'el-GR': /^[0-9Α-ω]+$/i,
4445
'es-ES': /^[0-9A-ZÁÉÍÑÓÚÜ]+$/i,
46+
'fi-FI': /^[0-9A-ZÅÄÖ]+$/i,
4547
'fr-FR': /^[0-9A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/i,
4648
'it-IT': /^[0-9A-ZÀÉÈÌÎÓÒÙ]+$/i,
4749
'hu-HU': /^[0-9A-ZÁÉÍÓÖŐÚÜŰ]+$/i,

src/lib/isFQDN.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const default_fqdn_options = {
66
allow_underscores: false,
77
allow_trailing_dot: false,
88
allow_numeric_tld: false,
9+
allow_wildcard: false,
910
};
1011

1112
export default function isFQDN(str, options) {
@@ -16,6 +17,12 @@ export default function isFQDN(str, options) {
1617
if (options.allow_trailing_dot && str[str.length - 1] === '.') {
1718
str = str.substring(0, str.length - 1);
1819
}
20+
21+
/* Remove the optional wildcard before checking validity */
22+
if (options.allow_wildcard === true && str.indexOf('*.') === 0) {
23+
str = str.substring(2);
24+
}
25+
1926
const parts = str.split('.');
2027
const tld = parts[parts.length - 1];
2128

@@ -25,12 +32,12 @@ export default function isFQDN(str, options) {
2532
return false;
2633
}
2734

28-
if (!/^([a-z\u00a1-\uffff]{2,}|xn[a-z0-9-]{2,})$/i.test(tld)) {
35+
if (!/^([a-z\u00A1-\u00A8\u00AA-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}|xn[a-z0-9-]{2,})$/i.test(tld)) {
2936
return false;
3037
}
3138

32-
// disallow spaces && special characers
33-
if (/[\s\u2002-\u200B\u202F\u205F\u3000\uFEFF\uDB40\uDC20\u00A9\uFFFD]/.test(tld)) {
39+
// disallow spaces
40+
if (/\s/.test(tld)) {
3441
return false;
3542
}
3643
}

src/lib/isIdentityCard.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,26 @@ const validators = {
6363

6464
return sanitized.endsWith(controlDigits[number % 23]);
6565
},
66+
FI: (str) => {
67+
// https://dvv.fi/en/personal-identity-code#:~:text=control%20character%20for%20a-,personal,-identity%20code%20calculated
68+
assertString(str);
69+
70+
if (str.length !== 11) {
71+
return false;
72+
}
73+
74+
if (!str.match(/^\d{6}[\-A\+]\d{3}[0-9ABCDEFHJKLMNPRSTUVWXY]{1}$/)) {
75+
return false;
76+
}
77+
78+
const checkDigits = '0123456789ABCDEFHJKLMNPRSTUVWXY';
79+
80+
const idAsNumber = (parseInt(str.slice(0, 6), 10) * 1000) + parseInt(str.slice(7, 10), 10);
81+
const remainder = idAsNumber % 31;
82+
const checkDigit = checkDigits[remainder];
83+
84+
return checkDigit === str.slice(10, 11);
85+
},
6686
IN: (str) => {
6787
const DNI = /^[1-9]\d{3}\s?\d{4}\s?\d{4}$/;
6888

@@ -160,6 +180,14 @@ const validators = {
160180
}
161181
return str[12] === ((11 - (sum % 11)) % 10).toString();
162182
},
183+
LK: (str) => {
184+
const old_nic = /^[1-9]\d{8}[vx]$/i;
185+
const new_nic = /^[1-9]\d{11}$/i;
186+
187+
if (str.length === 10 && old_nic.test(str)) return true;
188+
else if (str.length === 12 && new_nic.test(str)) return true;
189+
return false;
190+
},
163191
'he-IL': (str) => {
164192
const DNI = /^\d{9}$/;
165193

src/lib/isLicensePlate.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const validators = {
66
'de-DE': str =>
77
/^((AW|UL|AK|GA|AÖ|LF|AZ|AM|AS|ZE|AN|AB|A|KG|KH|BA|EW|BZ|HY|KM|BT|HP|B|BC|BI|BO|FN|TT|ÜB|BN|AH|BS|FR|HB|ZZ|BB|BK|BÖ|OC|OK|CW|CE|C|CO|LH|CB|KW|LC|LN|DA|DI|DE|DH|SY|NÖ|DO|DD|DU|DN|D|EI|EA|EE|FI|EM|EL|EN|PF|ED|EF|ER|AU|ZP|E|ES|NT|EU|FL|FO|FT|FF|F|FS|FD|FÜ|GE|G|GI|GF|GS|ZR|GG|GP|GR|NY|ZI|GÖ|GZ|GT|HA|HH|HM|HU|WL|HZ|WR|RN|HK|HD|HN|HS|GK|HE|HF|RZ|HI|HG|HO|HX|IK|IL|IN|J|JL|KL|KA|KS|KF|KE|KI|KT|KO|KN|KR|KC|KU|K|LD|LL|LA|L|OP|LM|LI|LB|LU|LÖ|HL|LG|MD|GN|MZ|MA|ML|MR|MY|AT|DM|MC|NZ|RM|RG|MM|ME|MB|MI|FG|DL|HC|MW|RL|MK|MG|MÜ|WS|MH|M|MS|NU|NB|ND|NM|NK|NW|NR|NI|NF|DZ|EB|OZ|TG|TO|N|OA|GM|OB|CA|EH|FW|OF|OL|OE|OG|BH|LR|OS|AA|GD|OH|KY|NP|WK|PB|PA|PE|PI|PS|P|PM|PR|RA|RV|RE|R|H|SB|WN|RS|RD|RT|BM|NE|GV|RP|SU|GL|RO|GÜ|RH|EG|RW|PN|SK|MQ|RU|SZ|RI|SL|SM|SC|HR|FZ|VS|SW|SN|CR|SE|SI|SO|LP|SG|NH|SP|IZ|ST|BF|TE|HV|OD|SR|S|AC|DW|ZW|TF|TS|TR|TÜ|UM|PZ|TP|UE|UN|UH|MN|KK|VB|V|AE|PL|RC|VG|GW|PW|VR|VK|KB|WA|WT|BE|WM|WE|AP|MO|WW|FB|WZ|WI|WB|JE|WF|WO|W|WÜ|BL|Z|GC)[- ]?[A-Z]{1,2}[- ]?\d{1,4}|(AIC|FDB|ABG|SLN|SAW|KLZ|BUL|ESB|NAB|SUL|WST|ABI|AZE|BTF|KÖT|DKB|FEU|ROT|ALZ|SMÜ|WER|AUR|NOR|DÜW|BRK|HAB|TÖL|WOR|BAD|BAR|BER|BIW|EBS|KEM|MÜB|PEG|BGL|BGD|REI|WIL|BKS|BIR|WAT|BOR|BOH|BOT|BRB|BLK|HHM|NEB|NMB|WSF|LEO|HDL|WMS|WZL|BÜS|CHA|KÖZ|ROD|WÜM|CLP|NEC|COC|ZEL|COE|CUX|DAH|LDS|DEG|DEL|RSL|DLG|DGF|LAN|HEI|MED|DON|KIB|ROK|JÜL|MON|SLE|EBE|EIC|HIG|WBS|BIT|PRÜ|LIB|EMD|WIT|ERH|HÖS|ERZ|ANA|ASZ|MAB|MEK|STL|SZB|FDS|HCH|HOR|WOL|FRG|GRA|WOS|FRI|FFB|GAP|GER|BRL|CLZ|GTH|NOH|HGW|GRZ|LÖB|NOL|WSW|DUD|HMÜ|OHA|KRU|HAL|HAM|HBS|QLB|HVL|NAU|HAS|EBN|GEO|HOH|HDH|ERK|HER|WAN|HEF|ROF|HBN|ALF|HSK|USI|NAI|REH|SAN|KÜN|ÖHR|HOL|WAR|ARN|BRG|GNT|HOG|WOH|KEH|MAI|PAR|RID|ROL|KLE|GEL|KUS|KYF|ART|SDH|LDK|DIL|MAL|VIB|LER|BNA|GHA|GRM|MTL|WUR|LEV|LIF|STE|WEL|LIP|VAI|LUP|HGN|LBZ|LWL|PCH|STB|DAN|MKK|SLÜ|MSP|TBB|MGH|MTK|BIN|MSH|EIL|HET|SGH|BID|MYK|MSE|MST|MÜR|WRN|MEI|GRH|RIE|MZG|MIL|OBB|BED|FLÖ|MOL|FRW|SEE|SRB|AIB|MOS|BCH|ILL|SOB|NMS|NEA|SEF|UFF|NEW|VOH|NDH|TDO|NWM|GDB|GVM|WIS|NOM|EIN|GAN|LAU|HEB|OHV|OSL|SFB|ERB|LOS|BSK|KEL|BSB|MEL|WTL|OAL|FÜS|MOD|OHZ|OPR|BÜR|PAF|PLÖ|CAS|GLA|REG|VIT|ECK|SIM|GOA|EMS|DIZ|GOH|RÜD|SWA|NES|KÖN|MET|LRO|BÜZ|DBR|ROS|TET|HRO|ROW|BRV|HIP|PAN|GRI|SHK|EIS|SRO|SOK|LBS|SCZ|MER|QFT|SLF|SLS|HOM|SLK|ASL|BBG|SBK|SFT|SHG|MGN|MEG|ZIG|SAD|NEN|OVI|SHA|BLB|SIG|SON|SPN|FOR|GUB|SPB|IGB|WND|STD|STA|SDL|OBG|HST|BOG|SHL|PIR|FTL|SEB|SÖM|SÜW|TIR|SAB|TUT|ANG|SDT|LÜN|LSZ|MHL|VEC|VER|VIE|OVL|ANK|OVP|SBG|UEM|UER|WLG|GMN|NVP|RDG|RÜG|DAU|FKB|WAF|WAK|SLZ|WEN|SOG|APD|WUG|GUN|ESW|WIZ|WES|DIN|BRA|BÜD|WHV|HWI|GHC|WTM|WOB|WUN|MAK|SEL|OCH|HOT|WDA)[- ]?(([A-Z][- ]?\d{1,4})|([A-Z]{2}[- ]?\d{1,3})))[- ]?(E|H)?$/.test(str),
88
'de-LI': str => /^FL[- ]?\d{1,5}[UZ]?$/.test(str),
9+
'fi-FI': str => /^(?=.{4,7})(([A-Z]{1,3}|[0-9]{1,3})[\s-]?([A-Z]{1,3}|[0-9]{1,5}))$/.test(str),
910
'pt-PT': str =>
1011
/^([A-Z]{2}|[0-9]{2})[ -·]?([A-Z]{2}|[0-9]{2})[ -·]?([A-Z]{2}|[0-9]{2})$/.test(str),
1112
'sq-AL': str =>

src/lib/isMobilePhone.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ const phones = {
3131
'de-LU': /^(\+352)?((6\d1)\d{6})$/,
3232
'el-GR': /^(\+?30|0)?(69\d{8})$/,
3333
'en-AU': /^(\+?61|0)4\d{8}$/,
34+
'en-BM': /^(\+?1)?441(((3|7)\d{6}$)|(5[0-3][0-9]\d{4}$)|(59\d{5}))/,
3435
'en-GB': /^(\+?44|0)7\d{9}$/,
3536
'en-GG': /^(\+?44|0)1481\d{6}$/,
3637
'en-GH': /^(\+233|0)(20|50|24|54|27|57|26|56|23|28|55|59)\d{7}$/,
@@ -43,7 +44,7 @@ const phones = {
4344
'en-MU': /^(\+?230|0)?\d{8}$/,
4445
'en-NG': /^(\+?234|0)?[789]\d{9}$/,
4546
'en-NZ': /^(\+?64|0)[28]\d{7,9}$/,
46-
'en-PK': /^((\+92)|(0092))-{0,1}\d{3}-{0,1}\d{7}$|^\d{11}$|^\d{4}-\d{7}$/,
47+
'en-PK': /^((00|\+)?92|0)3[0-6]\d{8}$/,
4748
'en-PH': /^(09|\+639)\d{9}$/,
4849
'en-RW': /^(\+?250|0)?[7]\d{8}$/,
4950
'en-SG': /^(\+65)?[3689]\d{7}$/,
@@ -59,6 +60,7 @@ const phones = {
5960
'es-CO': /^(\+?57)?3(0(0|1|2|4|5)|1\d|2[0-4]|5(0|1))\d{7}$/,
6061
'es-CL': /^(\+?56|0)[2-9]\d{1}\d{7}$/,
6162
'es-CR': /^(\+506)?[2-8]\d{7}$/,
63+
'es-CU': /^(\+53|0053)?5\d{7}/,
6264
'es-DO': /^(\+?1)?8[024]9\d{7}$/,
6365
'es-HN': /^(\+?504)?[9|8]\d{7}$/,
6466
'es-EC': /^(\+?593|0)([2-7]|9[2-9])\d{7}$/,
@@ -81,7 +83,7 @@ const phones = {
8183
'fr-MQ': /^(\+?596|0|00596)[67]\d{8}$/,
8284
'fr-RE': /^(\+?262|0|00262)[67]\d{8}$/,
8385
'he-IL': /^(\+972|0)([23489]|5[012345689]|77)[1-9]\d{6}$/,
84-
'hu-HU': /^(\+?36)(20|30|70)\d{7}$/,
86+
'hu-HU': /^(\+?36|06)(20|30|31|50|70)\d{7}$/,
8587
'id-ID': /^(\+?62|0)8(1[123456789]|2[1238]|3[1238]|5[12356789]|7[78]|9[56789]|8[123456789])([\s?|\d]{5,11})$/,
8688
'it-IT': /^(\+?39)?\s?3\d{2} ?\d{6,7}$/,
8789
'it-SM': /^((\+378)|(0549)|(\+390549)|(\+3780549))?6\d{5,9}$/,
@@ -105,7 +107,7 @@ const phones = {
105107
'pt-AO': /^(\+244)\d{9}$/,
106108
'ro-RO': /^(\+?4?0)\s?7\d{2}(\/|\s|\.|\-)?\d{3}(\s|\.|\-)?\d{3}$/,
107109
'ru-RU': /^(\+?7|8)?9\d{9}$/,
108-
'si-LK': /^(?:0|94|\+94)?(7(0|1|2|5|6|7|8)( |-)?\d)\d{6}$/,
110+
'si-LK': /^(?:0|94|\+94)?(7(0|1|2|4|5|6|7|8)( |-)?)\d{7}$/,
109111
'sl-SI': /^(\+386\s?|0)(\d{1}\s?\d{3}\s?\d{2}\s?\d{2}|\d{2}\s?\d{3}\s?\d{3})$/,
110112
'sk-SK': /^(\+?421)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,
111113
'sq-AL': /^(\+355|0)6[789]\d{6}$/,
@@ -116,7 +118,7 @@ const phones = {
116118
'uk-UA': /^(\+?38|8)?0\d{9}$/,
117119
'uz-UZ': /^(\+?998)?(6[125-79]|7[1-69]|88|9\d)\d{7}$/,
118120
'vi-VN': /^((\+?84)|0)((3([2-9]))|(5([25689]))|(7([0|6-9]))|(8([1-9]))|(9([0-9])))([0-9]{7})$/,
119-
'zh-CN': /^((\+|00)86)?1([3456789][0-9]|4[579]|6[2567]|7[01235678]|9[012356789])[0-9]{8}$/,
121+
'zh-CN': /^((\+|00)86)?(1[3-9]|9[28])\d{9}$/,
120122
'zh-TW': /^(\+?886\-?|0)?9\d{8}$/,
121123
};
122124
/* eslint-enable max-len */

src/lib/isPassportNumber.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,10 @@ const passportRegexByCountryCode = {
4747
MZ: /^([A-Z]{2}\d{7})|(\d{2}[A-Z]{2}\d{5})$/, // MOZAMBIQUE
4848
MY: /^[AHK]\d{8}$/, // MALAYSIA
4949
NL: /^[A-Z]{2}[A-Z0-9]{6}\d$/, // NETHERLANDS
50-
PO: /^[A-Z]{2}\d{7}$/, // POLAND
50+
PL: /^[A-Z]{2}\d{7}$/, // POLAND
5151
PT: /^[A-Z]\d{6}$/, // PORTUGAL
5252
RO: /^\d{8,9}$/, // ROMANIA
53-
RU: /^\d{2}\d{2}\d{6}$/, // RUSSIAN FEDERATION
53+
RU: /^\d{9}$/, // RUSSIAN FEDERATION
5454
SE: /^\d{8}$/, // SWEDEN
5555
SL: /^(P)[A-Z]\d{7}$/, // SLOVANIA
5656
SK: /^[0-9A-Z]\d{7}$/, // SLOVAKIA

src/lib/isPostalCode.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ const patterns = {
4646
LT: /^LT\-\d{5}$/,
4747
LU: fourDigit,
4848
LV: /^LV\-\d{4}$/,
49+
LK: fiveDigit,
4950
MX: fiveDigit,
5051
MT: /^[A-Za-z]{3}\s{0,1}\d{4}$/,
5152
MY: fiveDigit,

src/lib/isURL.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,13 +111,17 @@ export default function isURL(url, options) {
111111
if (options.disallow_auth) {
112112
return false;
113113
}
114-
if (split[0] === '' || split[0].substr(0, 1) === ':') {
114+
if (split[0] === '') {
115115
return false;
116116
}
117117
auth = split.shift();
118118
if (auth.indexOf(':') >= 0 && auth.split(':').length > 2) {
119119
return false;
120120
}
121+
const [user, password] = auth.split(':');
122+
if (user === '' && password === '') {
123+
return false;
124+
}
121125
}
122126
hostname = split.join('@');
123127

@@ -136,7 +140,7 @@ export default function isURL(url, options) {
136140
}
137141
}
138142

139-
if (port_str !== null) {
143+
if (port_str !== null && port_str.length > 0) {
140144
port = parseInt(port_str, 10);
141145
if (!/^[0-9]+$/.test(port_str) || port <= 0 || port > 65535) {
142146
return false;

src/lib/isUUID.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ const uuid = {
77
all: /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i,
88
};
99

10-
export default function isUUID(str, version = 'all') {
10+
export default function isUUID(str, version) {
1111
assertString(str);
12-
const pattern = uuid[version];
12+
const pattern = uuid[![undefined, null].includes(version) ? version : 'all'];
1313
return pattern && pattern.test(str);
1414
}

0 commit comments

Comments
 (0)