From 2595554f07c4da3ef48ce3f1942a3a2c2def24af Mon Sep 17 00:00:00 2001 From: dror-heller Date: Fri, 16 Jul 2021 09:51:19 +0300 Subject: [PATCH 1/5] feat: Export list of country codes that implement IBAN (#1669) * feat(niceToHave): Export list of country codes that implement IBAN * Update src/index.js Co-authored-by: Federico Ciardi * fix(bug): Export isIBANLocales by its correct alias * fix(test): fix name change in test * fix(standards): change members exported name Co-authored-by: drorh Co-authored-by: Federico Ciardi --- src/index.js | 3 ++- src/lib/isIBAN.js | 2 ++ test/exports.js | 6 ++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 675947481..59b813c1f 100644 --- a/src/index.js +++ b/src/index.js @@ -48,7 +48,7 @@ import isHSL from './lib/isHSL'; import isISRC from './lib/isISRC'; -import isIBAN from './lib/isIBAN'; +import isIBAN, { locales as ibanLocales } from './lib/isIBAN'; import isBIC from './lib/isBIC'; import isMD5 from './lib/isMD5'; @@ -222,6 +222,7 @@ const validator = { isDate, isLicensePlate, isVAT, + ibanLocales, }; export default validator; diff --git a/src/lib/isIBAN.js b/src/lib/isIBAN.js index 19853aaf2..535a95772 100644 --- a/src/lib/isIBAN.js +++ b/src/lib/isIBAN.js @@ -135,3 +135,5 @@ export default function isIBAN(str) { return hasValidIbanFormat(str) && hasValidIbanChecksum(str); } + +export const locales = Object.keys(ibanRegexThroughCountryCode); diff --git a/test/exports.js b/test/exports.js index 32daa9971..0bff532ab 100644 --- a/test/exports.js +++ b/test/exports.js @@ -5,6 +5,7 @@ import { locales as isAlphaLocales } from '../src/lib/isAlpha'; import { locales as isAlphanumericLocales } from '../src/lib/isAlphanumeric'; import { locales as isMobilePhoneLocales } from '../src/lib/isMobilePhone'; import { locales as isFloatLocales } from '../src/lib/isFloat'; +import { locales as ibanCountryCodes } from '../src/lib/isIBAN'; describe('Exports', () => { it('should export validators', () => { @@ -50,4 +51,9 @@ describe('Exports', () => { assert.ok(isFloatLocales instanceof Array); assert.ok(validator.isFloatLocales instanceof Array); }); + + it('should export a list of country codes that implement IBAN', () => { + assert.ok(ibanCountryCodes instanceof Array); + assert.ok(validator.ibanLocales instanceof Array); + }); }); From b82d4e1b1f9dafcc130ca5dd548324a501741369 Mon Sep 17 00:00:00 2001 From: Laura <53280856+laulujan@users.noreply.github.com> Date: Fri, 16 Jul 2021 01:57:36 -0500 Subject: [PATCH 2/5] feat:(isMobilePhone): add mobile number prefix 162 and 165 to zh-CN locale (#1695) --- src/lib/isMobilePhone.js | 2 +- test/validators.js | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lib/isMobilePhone.js b/src/lib/isMobilePhone.js index 95b568547..6bf6d2234 100644 --- a/src/lib/isMobilePhone.js +++ b/src/lib/isMobilePhone.js @@ -114,7 +114,7 @@ const phones = { 'uk-UA': /^(\+?38|8)?0\d{9}$/, 'uz-UZ': /^(\+?998)?(6[125-79]|7[1-69]|88|9\d)\d{7}$/, 'vi-VN': /^(\+?84|0)((3([2-9]))|(5([2689]))|(7([0|6-9]))|(8([1-9]))|(9([0-9])))([0-9]{7})$/, - 'zh-CN': /^((\+|00)86)?1([3456789][0-9]|4[579]|6[67]|7[01235678]|9[012356789])[0-9]{8}$/, + 'zh-CN': /^((\+|00)86)?1([3456789][0-9]|4[579]|6[2567]|7[01235678]|9[012356789])[0-9]{8}$/, 'zh-TW': /^(\+?886\-?|0)?9\d{8}$/, }; /* eslint-enable max-len */ diff --git a/test/validators.js b/test/validators.js index c7119487b..57f2d2b68 100644 --- a/test/validators.js +++ b/test/validators.js @@ -5987,6 +5987,9 @@ describe('Validators', () => { '16565600001', '+8617269427292', '008617269427292', + '16238234822', + '008616238234822', + '+8616238234822', ], invalid: [ '12345', From c87956ac3834201c9e05f0e93299a370ff2dd2d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tron=C3=AD=C4=8Dek?= Date: Fri, 16 Jul 2021 13:49:14 +0200 Subject: [PATCH 3/5] feat(isLicensePlate): Add Czech license plates (#1565) * Add Czech license plates to the RegEx mix * Reorder list * Update README * Add tests * Remove trailing space * Add more tests --- README.md | 2 +- src/lib/isLicensePlate.js | 2 ++ test/validators.js | 25 +++++++++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 67496d8b5..00434af62 100644 --- a/README.md +++ b/README.md @@ -132,7 +132,7 @@ Validator | Description **isJWT(str)** | check if the string is valid JWT token. **isLatLong(str [, options])** | check if the string is a valid latitude-longitude coordinate in the format `lat,long` or `lat, long`.

`options` is an object that defaults to `{ checkDMS: false }`. Pass `checkDMS` as `true` to validate DMS(degrees, minutes, and seconds) latitude-longitude format. **isLength(str [, options])** | check if the string's length falls in a range.

`options` is an object which defaults to `{min:0, max: undefined}`. Note: this function takes into account surrogate pairs. -**isLicensePlate(str [, locale])** | check if string matches the format of a country's license plate.

(locale is one of `['de-DE', 'de-LI', 'pt-PT', 'sq-AL', 'pt-BR'']` or `any`). +**isLicensePlate(str [, locale])** | check if string matches the format of a country's license plate.

(locale is one of `['cs-CZ', 'de-DE', 'de-LI', 'pt-PT', 'sq-AL', 'pt-BR']` or `any`) **isLocale(str)** | check if the string is a locale **isLowercase(str)** | check if the string is lowercase. **isMACAddress(str)** | check if the string is a MAC address.

`options` is an object which defaults to `{no_separators: false}`. If `no_separators` is true, the validator will allow MAC addresses without separators. Also, it allows the use of hyphens, spaces or dots e.g '01 02 03 04 05 ab', '01-02-03-04-05-ab' or '0102.0304.05ab'. diff --git a/src/lib/isLicensePlate.js b/src/lib/isLicensePlate.js index a28d66da8..d81995bff 100644 --- a/src/lib/isLicensePlate.js +++ b/src/lib/isLicensePlate.js @@ -1,6 +1,8 @@ import assertString from './util/assertString'; const validators = { + 'cs-CZ': str => + /^(([ABCDEFHKIJKLMNPRSTUVXYZ]|[0-9])-?){5,8}$/.test(str), 'de-DE': str => /^((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), 'de-LI': str => /^FL[- ]?\d{1,5}[UZ]?$/.test(str), diff --git a/test/validators.js b/test/validators.js index 57f2d2b68..675ac0ea7 100644 --- a/test/validators.js +++ b/test/validators.js @@ -10696,6 +10696,31 @@ describe('Validators', () => { 'AAA 00 AAA', ], }); + test({ + validator: 'isLicensePlate', + args: ['cs-CZ'], + valid: [ + 'ALA4011', + '4A23000', + 'DICTAT0R', + 'VETERAN', + 'AZKVIZ8', + '2A45876', + 'DIC-TAT0R', + ], + invalid: [ + '', + 'invalidlicenseplate', + 'LN5758898', + 'X-|$|-X', + 'AE0F-OP4', + 'GO0MER', + '2AAAAAAAA', + 'FS AB 1234 E', + 'GB999 9999 00', + ], + }); + test({ validator: 'isLicensePlate', args: ['pt-BR'], From 044159d7b80aadef0c4b7aba7a4ea0e72a2eaa50 Mon Sep 17 00:00:00 2001 From: Bryan Brophy Date: Fri, 16 Jul 2021 07:05:17 -0500 Subject: [PATCH 4/5] feat(isBoolean) Add loose option to isBoolean validator (#1676) * Add loose option to isBoolean validator * Move boolean array definitions outside of function --- README.md | 2 +- src/lib/isBoolean.js | 13 +++++++++++-- test/validators.js | 31 +++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 00434af62..e5cf0489b 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ Validator | Description **isBase64(str [, options])** | check if a string is base64 encoded. options is optional and defaults to `{urlSafe: false}`
when `urlSafe` is true it tests the given base64 encoded string is [url safe](https://base64.guru/standards/base64url) **isBefore(str [, date])** | check if the string is a date that's before the specified date. **isBIC(str)** | check if a string is a BIC (Bank Identification Code) or SWIFT code. -**isBoolean(str)** | check if a string is a boolean. +**isBoolean(str [, options])** | check if a string is a boolean.
`options` is an object which defaults to `{ loose: false }`. If loose is is set to false, the validator will strictly match ['true', 'false', '0', '1']. If loose is set to true, the validator will also match 'yes', 'no', and will match a valid boolean string of any case. (eg: ['true', 'True', 'TRUE']). **isBtcAddress(str)** | check if the string is a valid BTC address. **isByteLength(str [, options])** | check if the string's length (in UTF-8 bytes) falls in a range.

`options` is an object which defaults to `{min:0, max: undefined}`. **isCreditCard(str)** | check if the string is a credit card. diff --git a/src/lib/isBoolean.js b/src/lib/isBoolean.js index e7cb27dfa..9fddc2b48 100644 --- a/src/lib/isBoolean.js +++ b/src/lib/isBoolean.js @@ -1,6 +1,15 @@ import assertString from './util/assertString'; -export default function isBoolean(str) { +const defaultOptions = { loose: false }; +const strictBooleans = ['true', 'false', '1', '0']; +const looseBooleans = [...strictBooleans, 'yes', 'no']; + +export default function isBoolean(str, options = defaultOptions) { assertString(str); - return (['true', 'false', '1', '0'].indexOf(str) >= 0); + + if (options.loose) { + return looseBooleans.includes(str.toLowerCase()); + } + + return strictBooleans.includes(str); } diff --git a/test/validators.js b/test/validators.js index 675ac0ea7..5ee08e869 100644 --- a/test/validators.js +++ b/test/validators.js @@ -8873,6 +8873,37 @@ describe('Validators', () => { }); }); + it('should validate booleans with option loose set to true', () => { + test({ + validator: 'isBoolean', + args: [ + { loose: true }, + ], + valid: [ + 'true', + 'True', + 'TRUE', + 'false', + 'False', + 'FALSE', + '0', + '1', + 'yes', + 'Yes', + 'YES', + 'no', + 'No', + 'NO', + ], + invalid: [ + '1.0', + '0.0', + 'true ', + ' false', + ], + }); + }); + const validISO8601 = [ '2009-12T12:34', '2009', From 01eeaef8f2b708c2e88a604e1668c77ad6aed990 Mon Sep 17 00:00:00 2001 From: Anna Maria Jansen Date: Fri, 16 Jul 2021 14:09:05 +0200 Subject: [PATCH 5/5] feat(isMobilePhone): change the german prefix from '+490' to '+49' or '0' (#1679) * fix: restrict german numbers * fix: allow 0 prefix Co-authored-by: Anna-Maria Jansen --- src/lib/isMobilePhone.js | 2 +- test/validators.js | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/lib/isMobilePhone.js b/src/lib/isMobilePhone.js index 6bf6d2234..b2839d679 100644 --- a/src/lib/isMobilePhone.js +++ b/src/lib/isMobilePhone.js @@ -25,7 +25,7 @@ const phones = { 'ca-AD': /^(\+376)?[346]\d{5}$/, 'cs-CZ': /^(\+?420)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/, 'da-DK': /^(\+?45)?\s?\d{2}\s?\d{2}\s?\d{2}\s?\d{2}$/, - 'de-DE': /^(\+49)?0?[1|3]([0|5][0-45-9]\d|6([23]|0\d?)|7([0-57-9]|6\d))\d{7}$/, + 'de-DE': /^((\+49|0)[1|3])([0|5][0-45-9]\d|6([23]|0\d?)|7([0-57-9]|6\d))\d{7,9}$/, 'de-AT': /^(\+43|0)\d{1,4}\d{3,12}$/, 'de-CH': /^(\+41|0)([1-9])\d{1,9}$/, 'de-LU': /^(\+352)?((6\d1)\d{6})$/, diff --git a/test/validators.js b/test/validators.js index 5ee08e869..ef24ea448 100644 --- a/test/validators.js +++ b/test/validators.js @@ -5828,21 +5828,20 @@ describe('Validators', () => { { locale: 'de-DE', valid: [ - '+49015123456789', '+4915123456789', '+4930405044550', '015123456789', - '15123456789', - '15623456789', - '15623456789', - '1601234567', - '16012345678', - '1621234567', - '1631234567', - '1701234567', - '17612345678', - '15345678910', - '15412345678', + '015123456789', + '015623456789', + '015623456789', + '01601234567', + '016012345678', + '01621234567', + '01631234567', + '01701234567', + '017612345678', + '015345678910', + '015412345678', ], invalid: [ '34412345678', @@ -5852,6 +5851,7 @@ describe('Validators', () => { '16412345678', '17012345678', '+4912345678910', + '+49015123456789', ], }, {