Skip to content

Commit c44d0d7

Browse files
authored
Merge branch 'master' into pakPassport
2 parents d1d4ec7 + 7b47f53 commit c44d0d7

File tree

7 files changed

+451
-12
lines changed

7 files changed

+451
-12
lines changed

README.md

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

src/lib/alpha.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export const alpha = {
1111
'fi-FI': /^[A-ZÅÄÖ]+$/i,
1212
'fr-FR': /^[A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/i,
1313
'it-IT': /^[A-ZÀÉÈÌÎÓÒÙ]+$/i,
14+
'ja-JP': /^[----]+$/i,
1415
'nb-NO': /^[A-ZÆØÅ]+$/i,
1516
'nl-NL': /^[A-ZÁÉËÏÓÖÜÚ]+$/i,
1617
'nn-NO': /^[A-ZÆØÅ]+$/i,
@@ -27,6 +28,7 @@ export const alpha = {
2728
'tr-TR': /^[A-ZÇĞİıÖŞÜ]+$/i,
2829
'uk-UA': /^[А-ЩЬЮЯЄIЇҐі]+$/i,
2930
'vi-VN': /^[A-ZÀÁÃÂĂĐÈÉÊÌÍĨÒÓÕÔƠÙÚŨƯÝ]+$/i,
31+
'ko-KR': /^[---]*$/,
3032
'ku-IQ': /^[ئابپتجچحخدرڕزژسشعغفڤقکگلڵمنوۆھەیێيطؤثآإأكضصةظذ]+$/i,
3133
ar: /^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/,
3234
he: /^[א-ת]+$/,
@@ -48,6 +50,7 @@ export const alphanumeric = {
4850
'fi-FI': /^[0-9A-ZÅÄÖ]+$/i,
4951
'fr-FR': /^[0-9A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/i,
5052
'it-IT': /^[0-9A-ZÀÉÈÌÎÓÒÙ]+$/i,
53+
'ja-JP': /^[0-9-----]+$/i,
5154
'hu-HU': /^[0-9A-ZÁÉÍÓÖŐÚÜŰ]+$/i,
5255
'nb-NO': /^[0-9A-ZÆØÅ]+$/i,
5356
'nl-NL': /^[0-9A-ZÁÉËÏÓÖÜÚ]+$/i,
@@ -63,6 +66,7 @@ export const alphanumeric = {
6366
'th-TH': /^[-\s]+$/i,
6467
'tr-TR': /^[0-9A-ZÇĞİıÖŞÜ]+$/i,
6568
'uk-UA': /^[0-9А-ЩЬЮЯЄIЇҐі]+$/i,
69+
'ko-KR': /^[0-9---]*$/,
6670
'ku-IQ': /^[٠١٢٣٤٥٦٧٨٩0-9ئابپتجچحخدرڕزژسشعغفڤقکگلڵمنوۆھەیێيطؤثآإأكضصةظذ]+$/i,
6771
'vi-VN': /^[0-9A-ZÀÁÃÂĂĐÈÉÊÌÍĨÒÓÕÔƠÙÚŨƯÝ]+$/i,
6872
ar: /^[٠١٢٣٤٥٦٧٨٩0-9ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/,

src/lib/isCreditCard.js

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,34 @@
11
import assertString from './util/assertString';
22
import isLuhnValid from './isLuhnValid';
33

4+
const cards = {
5+
amex: /^3[47][0-9]{13}$/,
6+
dinersclub: /^3(?:0[0-5]|[68][0-9])[0-9]{11}$/,
7+
discover: /^6(?:011|5[0-9][0-9])[0-9]{12,15}$/,
8+
jcb: /^(?:2131|1800|35\d{3})\d{11}$/,
9+
mastercard: /^5[1-5][0-9]{2}|(222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}$/, // /^[25][1-7][0-9]{14}$/;
10+
unionpay: /^(6[27][0-9]{14}|^(81[0-9]{14,17}))$/,
11+
visa: /^(?:4[0-9]{12})(?:[0-9]{3,6})?$/,
12+
};
413
/* eslint-disable max-len */
5-
const creditCard = /^(?:4[0-9]{12}(?:[0-9]{3,6})?|5[1-5][0-9]{14}|(222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}|6(?:011|5[0-9][0-9])[0-9]{12,15}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11}|6[27][0-9]{14}|^(81[0-9]{14,17}))$/;
14+
const allCards = /^(?:4[0-9]{12}(?:[0-9]{3,6})?|5[1-5][0-9]{14}|(222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}|6(?:011|5[0-9][0-9])[0-9]{12,15}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11}|6[27][0-9]{14}|^(81[0-9]{14,17}))$/;
615
/* eslint-enable max-len */
716

8-
export default function isCreditCard(str) {
9-
assertString(str);
10-
const sanitized = str.replace(/[- ]+/g, '');
11-
if (!creditCard.test(sanitized)) {
17+
export default function isCreditCard(card, options = {}) {
18+
assertString(card);
19+
const { provider } = options;
20+
const sanitized = card.replace(/[- ]+/g, '');
21+
if (provider && provider.toLowerCase() in cards) {
22+
// specific provider in the list
23+
if (!(cards[provider.toLowerCase()].test(sanitized))) {
24+
return false;
25+
}
26+
} else if (provider && !(provider.toLowerCase() in cards)) {
27+
/* specific provider not in the list */
28+
throw new Error(`${provider} is not a valid credit card provider.`);
29+
} else if (!(allCards.test(sanitized))) {
30+
// no specific provider
1231
return false;
1332
}
14-
return isLuhnValid(str);
33+
return isLuhnValid(card);
1534
}

src/lib/isEmail.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const default_email_options = {
1313
blacklisted_chars: '',
1414
ignore_max_length: false,
1515
host_blacklist: [],
16+
host_whitelist: [],
1617
};
1718

1819
/* eslint-disable max-len */
@@ -99,6 +100,10 @@ export default function isEmail(str, options) {
99100
return false;
100101
}
101102

103+
if (options.host_whitelist.length > 0 && !options.host_whitelist.includes(lower_domain)) {
104+
return false;
105+
}
106+
102107
let user = parts.join('@');
103108

104109
if (options.domain_specific_validation && (lower_domain === 'gmail.com' || lower_domain === 'googlemail.com')) {

src/lib/isMobilePhone.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ const phones = {
4949
'en-JM': /^(\+?876)?\d{7}$/,
5050
'en-KE': /^(\+?254|0)(7|1)\d{8}$/,
5151
'en-KI': /^((\+686|686)?)?( )?((6|7)(2|3|8)[0-9]{6})$/,
52+
'en-KN': /^(?:\+1|1)869(?:46\d|48[89]|55[6-8]|66\d|76[02-7])\d{4}$/,
5253
'en-LS': /^(\+?266)(22|28|57|58|59|27|52)\d{6}$/,
5354
'en-MT': /^(\+?356|0)?(99|79|77|21|27|22|25)[0-9]{6}$/,
5455
'en-MU': /^(\+?230|0)?\d{8}$/,

src/lib/isPassportNumber.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ const passportRegexByCountryCode = {
5757
SE: /^\d{8}$/, // SWEDEN
5858
SL: /^(P)[A-Z]\d{7}$/, // SLOVANIA
5959
SK: /^[0-9A-Z]\d{7}$/, // SLOVAKIA
60+
TH: /^[A-Z]{1,2}\d{6,7}$/, // THAILAND
6061
TR: /^[A-Z]\d{8}$/, // TURKEY
6162
UA: /^[A-Z]{2}\d{6}$/, // UKRAINE
6263
US: /^\d{9}$/, // UNITED STATES

0 commit comments

Comments
 (0)