diff --git a/index.js b/index.js index 2a3f7586d..1b77a884e 100644 --- a/index.js +++ b/index.js @@ -1,386 +1,242 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; -var _toDate = require('./lib/toDate'); +var _toDate = _interopRequireDefault(require("./lib/toDate")); -var _toDate2 = _interopRequireDefault(_toDate); +var _toFloat = _interopRequireDefault(require("./lib/toFloat")); -var _toFloat = require('./lib/toFloat'); +var _toInt = _interopRequireDefault(require("./lib/toInt")); -var _toFloat2 = _interopRequireDefault(_toFloat); +var _toBoolean = _interopRequireDefault(require("./lib/toBoolean")); -var _toInt = require('./lib/toInt'); +var _equals = _interopRequireDefault(require("./lib/equals")); -var _toInt2 = _interopRequireDefault(_toInt); +var _contains = _interopRequireDefault(require("./lib/contains")); -var _toBoolean = require('./lib/toBoolean'); +var _matches = _interopRequireDefault(require("./lib/matches")); -var _toBoolean2 = _interopRequireDefault(_toBoolean); +var _isEmail = _interopRequireDefault(require("./lib/isEmail")); -var _equals = require('./lib/equals'); +var _isURL = _interopRequireDefault(require("./lib/isURL")); -var _equals2 = _interopRequireDefault(_equals); +var _isMACAddress = _interopRequireDefault(require("./lib/isMACAddress")); -var _contains = require('./lib/contains'); +var _isIP = _interopRequireDefault(require("./lib/isIP")); -var _contains2 = _interopRequireDefault(_contains); +var _isIPRange = _interopRequireDefault(require("./lib/isIPRange")); -var _matches = require('./lib/matches'); +var _isFQDN = _interopRequireDefault(require("./lib/isFQDN")); -var _matches2 = _interopRequireDefault(_matches); +var _isBoolean = _interopRequireDefault(require("./lib/isBoolean")); -var _isEmail = require('./lib/isEmail'); +var _isAlpha = _interopRequireWildcard(require("./lib/isAlpha")); -var _isEmail2 = _interopRequireDefault(_isEmail); +var _isAlphanumeric = _interopRequireWildcard(require("./lib/isAlphanumeric")); -var _isURL = require('./lib/isURL'); +var _isNumeric = _interopRequireDefault(require("./lib/isNumeric")); -var _isURL2 = _interopRequireDefault(_isURL); +var _isPort = _interopRequireDefault(require("./lib/isPort")); -var _isMACAddress = require('./lib/isMACAddress'); +var _isLowercase = _interopRequireDefault(require("./lib/isLowercase")); -var _isMACAddress2 = _interopRequireDefault(_isMACAddress); +var _isUppercase = _interopRequireDefault(require("./lib/isUppercase")); -var _isIP = require('./lib/isIP'); +var _isAscii = _interopRequireDefault(require("./lib/isAscii")); -var _isIP2 = _interopRequireDefault(_isIP); +var _isFullWidth = _interopRequireDefault(require("./lib/isFullWidth")); -var _isIPRange = require('./lib/isIPRange'); +var _isHalfWidth = _interopRequireDefault(require("./lib/isHalfWidth")); -var _isIPRange2 = _interopRequireDefault(_isIPRange); +var _isVariableWidth = _interopRequireDefault(require("./lib/isVariableWidth")); -var _isFQDN = require('./lib/isFQDN'); +var _isMultibyte = _interopRequireDefault(require("./lib/isMultibyte")); -var _isFQDN2 = _interopRequireDefault(_isFQDN); +var _isSurrogatePair = _interopRequireDefault(require("./lib/isSurrogatePair")); -var _isBoolean = require('./lib/isBoolean'); +var _isInt = _interopRequireDefault(require("./lib/isInt")); -var _isBoolean2 = _interopRequireDefault(_isBoolean); +var _isFloat = _interopRequireWildcard(require("./lib/isFloat")); -var _isAlpha = require('./lib/isAlpha'); +var _isDecimal = _interopRequireDefault(require("./lib/isDecimal")); -var _isAlpha2 = _interopRequireDefault(_isAlpha); +var _isHexadecimal = _interopRequireDefault(require("./lib/isHexadecimal")); -var _isAlphanumeric = require('./lib/isAlphanumeric'); +var _isDivisibleBy = _interopRequireDefault(require("./lib/isDivisibleBy")); -var _isAlphanumeric2 = _interopRequireDefault(_isAlphanumeric); +var _isHexColor = _interopRequireDefault(require("./lib/isHexColor")); -var _isNumeric = require('./lib/isNumeric'); +var _isISRC = _interopRequireDefault(require("./lib/isISRC")); -var _isNumeric2 = _interopRequireDefault(_isNumeric); +var _isMD = _interopRequireDefault(require("./lib/isMD5")); -var _isPort = require('./lib/isPort'); +var _isHash = _interopRequireDefault(require("./lib/isHash")); -var _isPort2 = _interopRequireDefault(_isPort); +var _isJWT = _interopRequireDefault(require("./lib/isJWT")); -var _isLowercase = require('./lib/isLowercase'); +var _isJSON = _interopRequireDefault(require("./lib/isJSON")); -var _isLowercase2 = _interopRequireDefault(_isLowercase); +var _isEmpty = _interopRequireDefault(require("./lib/isEmpty")); -var _isUppercase = require('./lib/isUppercase'); +var _isLength = _interopRequireDefault(require("./lib/isLength")); -var _isUppercase2 = _interopRequireDefault(_isUppercase); +var _isByteLength = _interopRequireDefault(require("./lib/isByteLength")); -var _isAscii = require('./lib/isAscii'); +var _isUUID = _interopRequireDefault(require("./lib/isUUID")); -var _isAscii2 = _interopRequireDefault(_isAscii); +var _isMongoId = _interopRequireDefault(require("./lib/isMongoId")); -var _isFullWidth = require('./lib/isFullWidth'); +var _isAfter = _interopRequireDefault(require("./lib/isAfter")); -var _isFullWidth2 = _interopRequireDefault(_isFullWidth); +var _isBefore = _interopRequireDefault(require("./lib/isBefore")); -var _isHalfWidth = require('./lib/isHalfWidth'); +var _isIn = _interopRequireDefault(require("./lib/isIn")); -var _isHalfWidth2 = _interopRequireDefault(_isHalfWidth); +var _isCreditCard = _interopRequireDefault(require("./lib/isCreditCard")); -var _isVariableWidth = require('./lib/isVariableWidth'); +var _isIdentityCard = _interopRequireDefault(require("./lib/isIdentityCard")); -var _isVariableWidth2 = _interopRequireDefault(_isVariableWidth); +var _isISIN = _interopRequireDefault(require("./lib/isISIN")); -var _isMultibyte = require('./lib/isMultibyte'); +var _isISBN = _interopRequireDefault(require("./lib/isISBN")); -var _isMultibyte2 = _interopRequireDefault(_isMultibyte); +var _isISSN = _interopRequireDefault(require("./lib/isISSN")); -var _isSurrogatePair = require('./lib/isSurrogatePair'); +var _isMobilePhone = _interopRequireWildcard(require("./lib/isMobilePhone")); -var _isSurrogatePair2 = _interopRequireDefault(_isSurrogatePair); +var _isCurrency = _interopRequireDefault(require("./lib/isCurrency")); -var _isInt = require('./lib/isInt'); +var _isISO = _interopRequireDefault(require("./lib/isISO8601")); -var _isInt2 = _interopRequireDefault(_isInt); +var _isRFC = _interopRequireDefault(require("./lib/isRFC3339")); -var _isFloat = require('./lib/isFloat'); +var _isISO31661Alpha = _interopRequireDefault(require("./lib/isISO31661Alpha2")); -var _isFloat2 = _interopRequireDefault(_isFloat); +var _isISO31661Alpha2 = _interopRequireDefault(require("./lib/isISO31661Alpha3")); -var _isDecimal = require('./lib/isDecimal'); +var _isBase = _interopRequireDefault(require("./lib/isBase64")); -var _isDecimal2 = _interopRequireDefault(_isDecimal); +var _isDataURI = _interopRequireDefault(require("./lib/isDataURI")); -var _isHexadecimal = require('./lib/isHexadecimal'); +var _isMagnetURI = _interopRequireDefault(require("./lib/isMagnetURI")); -var _isHexadecimal2 = _interopRequireDefault(_isHexadecimal); +var _isMimeType = _interopRequireDefault(require("./lib/isMimeType")); -var _isDivisibleBy = require('./lib/isDivisibleBy'); +var _isLatLong = _interopRequireDefault(require("./lib/isLatLong")); -var _isDivisibleBy2 = _interopRequireDefault(_isDivisibleBy); +var _isPostalCode = _interopRequireWildcard(require("./lib/isPostalCode")); -var _isHexColor = require('./lib/isHexColor'); +var _ltrim = _interopRequireDefault(require("./lib/ltrim")); -var _isHexColor2 = _interopRequireDefault(_isHexColor); +var _rtrim = _interopRequireDefault(require("./lib/rtrim")); -var _isISRC = require('./lib/isISRC'); +var _trim = _interopRequireDefault(require("./lib/trim")); -var _isISRC2 = _interopRequireDefault(_isISRC); +var _escape = _interopRequireDefault(require("./lib/escape")); -var _isMD = require('./lib/isMD5'); +var _unescape = _interopRequireDefault(require("./lib/unescape")); -var _isMD2 = _interopRequireDefault(_isMD); +var _stripLow = _interopRequireDefault(require("./lib/stripLow")); -var _isHash = require('./lib/isHash'); +var _whitelist = _interopRequireDefault(require("./lib/whitelist")); -var _isHash2 = _interopRequireDefault(_isHash); +var _blacklist = _interopRequireDefault(require("./lib/blacklist")); -var _isJWT = require('./lib/isJWT'); +var _isWhitelisted = _interopRequireDefault(require("./lib/isWhitelisted")); -var _isJWT2 = _interopRequireDefault(_isJWT); +var _normalizeEmail = _interopRequireDefault(require("./lib/normalizeEmail")); -var _isJSON = require('./lib/isJSON'); +var _toString = _interopRequireDefault(require("./lib/util/toString")); -var _isJSON2 = _interopRequireDefault(_isJSON); - -var _isEmpty = require('./lib/isEmpty'); - -var _isEmpty2 = _interopRequireDefault(_isEmpty); - -var _isLength = require('./lib/isLength'); - -var _isLength2 = _interopRequireDefault(_isLength); - -var _isByteLength = require('./lib/isByteLength'); - -var _isByteLength2 = _interopRequireDefault(_isByteLength); - -var _isUUID = require('./lib/isUUID'); - -var _isUUID2 = _interopRequireDefault(_isUUID); - -var _isMongoId = require('./lib/isMongoId'); - -var _isMongoId2 = _interopRequireDefault(_isMongoId); - -var _isAfter = require('./lib/isAfter'); - -var _isAfter2 = _interopRequireDefault(_isAfter); - -var _isBefore = require('./lib/isBefore'); - -var _isBefore2 = _interopRequireDefault(_isBefore); - -var _isIn = require('./lib/isIn'); - -var _isIn2 = _interopRequireDefault(_isIn); - -var _isCreditCard = require('./lib/isCreditCard'); - -var _isCreditCard2 = _interopRequireDefault(_isCreditCard); - -var _isIdentityCard = require('./lib/isIdentityCard'); - -var _isIdentityCard2 = _interopRequireDefault(_isIdentityCard); - -var _isISIN = require('./lib/isISIN'); - -var _isISIN2 = _interopRequireDefault(_isISIN); - -var _isISBN = require('./lib/isISBN'); - -var _isISBN2 = _interopRequireDefault(_isISBN); - -var _isISSN = require('./lib/isISSN'); - -var _isISSN2 = _interopRequireDefault(_isISSN); - -var _isMobilePhone = require('./lib/isMobilePhone'); - -var _isMobilePhone2 = _interopRequireDefault(_isMobilePhone); - -var _isCurrency = require('./lib/isCurrency'); - -var _isCurrency2 = _interopRequireDefault(_isCurrency); - -var _isISO = require('./lib/isISO8601'); - -var _isISO2 = _interopRequireDefault(_isISO); - -var _isRFC = require('./lib/isRFC3339'); - -var _isRFC2 = _interopRequireDefault(_isRFC); - -var _isISO31661Alpha = require('./lib/isISO31661Alpha2'); - -var _isISO31661Alpha2 = _interopRequireDefault(_isISO31661Alpha); - -var _isISO31661Alpha3 = require('./lib/isISO31661Alpha3'); - -var _isISO31661Alpha4 = _interopRequireDefault(_isISO31661Alpha3); - -var _isBase = require('./lib/isBase64'); - -var _isBase2 = _interopRequireDefault(_isBase); - -var _isDataURI = require('./lib/isDataURI'); - -var _isDataURI2 = _interopRequireDefault(_isDataURI); - -var _isMagnetURI = require('./lib/isMagnetURI'); - -var _isMagnetURI2 = _interopRequireDefault(_isMagnetURI); - -var _isMimeType = require('./lib/isMimeType'); - -var _isMimeType2 = _interopRequireDefault(_isMimeType); - -var _isLatLong = require('./lib/isLatLong'); - -var _isLatLong2 = _interopRequireDefault(_isLatLong); - -var _isPostalCode = require('./lib/isPostalCode'); - -var _isPostalCode2 = _interopRequireDefault(_isPostalCode); - -var _ltrim = require('./lib/ltrim'); - -var _ltrim2 = _interopRequireDefault(_ltrim); - -var _rtrim = require('./lib/rtrim'); - -var _rtrim2 = _interopRequireDefault(_rtrim); - -var _trim = require('./lib/trim'); - -var _trim2 = _interopRequireDefault(_trim); - -var _escape = require('./lib/escape'); - -var _escape2 = _interopRequireDefault(_escape); - -var _unescape = require('./lib/unescape'); - -var _unescape2 = _interopRequireDefault(_unescape); - -var _stripLow = require('./lib/stripLow'); - -var _stripLow2 = _interopRequireDefault(_stripLow); - -var _whitelist = require('./lib/whitelist'); - -var _whitelist2 = _interopRequireDefault(_whitelist); - -var _blacklist = require('./lib/blacklist'); - -var _blacklist2 = _interopRequireDefault(_blacklist); - -var _isWhitelisted = require('./lib/isWhitelisted'); - -var _isWhitelisted2 = _interopRequireDefault(_isWhitelisted); - -var _normalizeEmail = require('./lib/normalizeEmail'); - -var _normalizeEmail2 = _interopRequireDefault(_normalizeEmail); - -var _toString = require('./lib/util/toString'); - -var _toString2 = _interopRequireDefault(_toString); +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var version = '10.8.0'; - var validator = { version: version, - toDate: _toDate2.default, - toFloat: _toFloat2.default, - toInt: _toInt2.default, - toBoolean: _toBoolean2.default, - equals: _equals2.default, - contains: _contains2.default, - matches: _matches2.default, - isEmail: _isEmail2.default, - isURL: _isURL2.default, - isMACAddress: _isMACAddress2.default, - isIP: _isIP2.default, - isIPRange: _isIPRange2.default, - isFQDN: _isFQDN2.default, - isBoolean: _isBoolean2.default, - isAlpha: _isAlpha2.default, + toDate: _toDate.default, + toFloat: _toFloat.default, + toInt: _toInt.default, + toBoolean: _toBoolean.default, + equals: _equals.default, + contains: _contains.default, + matches: _matches.default, + isEmail: _isEmail.default, + isURL: _isURL.default, + isMACAddress: _isMACAddress.default, + isIP: _isIP.default, + isIPRange: _isIPRange.default, + isFQDN: _isFQDN.default, + isBoolean: _isBoolean.default, + isAlpha: _isAlpha.default, isAlphaLocales: _isAlpha.locales, - isAlphanumeric: _isAlphanumeric2.default, + isAlphanumeric: _isAlphanumeric.default, isAlphanumericLocales: _isAlphanumeric.locales, - isNumeric: _isNumeric2.default, - isPort: _isPort2.default, - isLowercase: _isLowercase2.default, - isUppercase: _isUppercase2.default, - isAscii: _isAscii2.default, - isFullWidth: _isFullWidth2.default, - isHalfWidth: _isHalfWidth2.default, - isVariableWidth: _isVariableWidth2.default, - isMultibyte: _isMultibyte2.default, - isSurrogatePair: _isSurrogatePair2.default, - isInt: _isInt2.default, - isFloat: _isFloat2.default, + isNumeric: _isNumeric.default, + isPort: _isPort.default, + isLowercase: _isLowercase.default, + isUppercase: _isUppercase.default, + isAscii: _isAscii.default, + isFullWidth: _isFullWidth.default, + isHalfWidth: _isHalfWidth.default, + isVariableWidth: _isVariableWidth.default, + isMultibyte: _isMultibyte.default, + isSurrogatePair: _isSurrogatePair.default, + isInt: _isInt.default, + isFloat: _isFloat.default, isFloatLocales: _isFloat.locales, - isDecimal: _isDecimal2.default, - isHexadecimal: _isHexadecimal2.default, - isDivisibleBy: _isDivisibleBy2.default, - isHexColor: _isHexColor2.default, - isISRC: _isISRC2.default, - isMD5: _isMD2.default, - isHash: _isHash2.default, - isJWT: _isJWT2.default, - isJSON: _isJSON2.default, - isEmpty: _isEmpty2.default, - isLength: _isLength2.default, - isByteLength: _isByteLength2.default, - isUUID: _isUUID2.default, - isMongoId: _isMongoId2.default, - isAfter: _isAfter2.default, - isBefore: _isBefore2.default, - isIn: _isIn2.default, - isCreditCard: _isCreditCard2.default, - isIdentityCard: _isIdentityCard2.default, - isISIN: _isISIN2.default, - isISBN: _isISBN2.default, - isISSN: _isISSN2.default, - isMobilePhone: _isMobilePhone2.default, + isDecimal: _isDecimal.default, + isHexadecimal: _isHexadecimal.default, + isDivisibleBy: _isDivisibleBy.default, + isHexColor: _isHexColor.default, + isISRC: _isISRC.default, + isMD5: _isMD.default, + isHash: _isHash.default, + isJWT: _isJWT.default, + isJSON: _isJSON.default, + isEmpty: _isEmpty.default, + isLength: _isLength.default, + isByteLength: _isByteLength.default, + isUUID: _isUUID.default, + isMongoId: _isMongoId.default, + isAfter: _isAfter.default, + isBefore: _isBefore.default, + isIn: _isIn.default, + isCreditCard: _isCreditCard.default, + isIdentityCard: _isIdentityCard.default, + isISIN: _isISIN.default, + isISBN: _isISBN.default, + isISSN: _isISSN.default, + isMobilePhone: _isMobilePhone.default, isMobilePhoneLocales: _isMobilePhone.locales, - isPostalCode: _isPostalCode2.default, + isPostalCode: _isPostalCode.default, isPostalCodeLocales: _isPostalCode.locales, - isCurrency: _isCurrency2.default, - isISO8601: _isISO2.default, - isRFC3339: _isRFC2.default, - isISO31661Alpha2: _isISO31661Alpha2.default, - isISO31661Alpha3: _isISO31661Alpha4.default, - isBase64: _isBase2.default, - isDataURI: _isDataURI2.default, - isMagnetURI: _isMagnetURI2.default, - isMimeType: _isMimeType2.default, - isLatLong: _isLatLong2.default, - ltrim: _ltrim2.default, - rtrim: _rtrim2.default, - trim: _trim2.default, - escape: _escape2.default, - unescape: _unescape2.default, - stripLow: _stripLow2.default, - whitelist: _whitelist2.default, - blacklist: _blacklist2.default, - isWhitelisted: _isWhitelisted2.default, - normalizeEmail: _normalizeEmail2.default, - toString: _toString2.default + isCurrency: _isCurrency.default, + isISO8601: _isISO.default, + isRFC3339: _isRFC.default, + isISO31661Alpha2: _isISO31661Alpha.default, + isISO31661Alpha3: _isISO31661Alpha2.default, + isBase64: _isBase.default, + isDataURI: _isDataURI.default, + isMagnetURI: _isMagnetURI.default, + isMimeType: _isMimeType.default, + isLatLong: _isLatLong.default, + ltrim: _ltrim.default, + rtrim: _rtrim.default, + trim: _trim.default, + escape: _escape.default, + unescape: _unescape.default, + stripLow: _stripLow.default, + whitelist: _whitelist.default, + blacklist: _blacklist.default, + isWhitelisted: _isWhitelisted.default, + normalizeEmail: _normalizeEmail.default, + toString: _toString.default }; - -exports.default = validator; -module.exports = exports['default']; \ No newline at end of file +var _default = validator; +exports.default = _default; +module.exports = exports.default; \ No newline at end of file diff --git a/lib/alpha.js b/lib/alpha.js index e07b67027..f3669408d 100644 --- a/lib/alpha.js +++ b/lib/alpha.js @@ -1,9 +1,10 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var alpha = exports.alpha = { +exports.commaDecimal = exports.dotDecimal = exports.arabicLocales = exports.englishLocales = exports.decimal = exports.alphanumeric = exports.alpha = void 0; +var alpha = { 'en-US': /^[A-Z]+$/i, 'bg-BG': /^[А-Я]+$/i, 'cs-CZ': /^[A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]+$/i, @@ -30,8 +31,8 @@ var alpha = exports.alpha = { 'ku-IQ': /^[ئابپتجچحخدرڕزژسشعغفڤقکگلڵمنوۆھەیێيطؤثآإأكضصةظذ]+$/i, ar: /^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/ }; - -var alphanumeric = exports.alphanumeric = { +exports.alpha = alpha; +var alphanumeric = { 'en-US': /^[0-9A-Z]+$/i, 'bg-BG': /^[0-9А-Я]+$/i, 'cs-CZ': /^[0-9A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]+$/i, @@ -58,34 +59,38 @@ var alphanumeric = exports.alphanumeric = { 'ku-IQ': /^[٠١٢٣٤٥٦٧٨٩0-9ئابپتجچحخدرڕزژسشعغفڤقکگلڵمنوۆھەیێيطؤثآإأكضصةظذ]+$/i, ar: /^[٠١٢٣٤٥٦٧٨٩0-9ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/ }; - -var decimal = exports.decimal = { +exports.alphanumeric = alphanumeric; +var decimal = { 'en-US': '.', ar: '٫' }; - -var englishLocales = exports.englishLocales = ['AU', 'GB', 'HK', 'IN', 'NZ', 'ZA', 'ZM']; +exports.decimal = decimal; +var englishLocales = ['AU', 'GB', 'HK', 'IN', 'NZ', 'ZA', 'ZM']; +exports.englishLocales = englishLocales; for (var locale, i = 0; i < englishLocales.length; i++) { - locale = 'en-' + englishLocales[i]; + locale = "en-".concat(englishLocales[i]); alpha[locale] = alpha['en-US']; alphanumeric[locale] = alphanumeric['en-US']; decimal[locale] = decimal['en-US']; -} +} // Source: http://www.localeplanet.com/java/ -// Source: http://www.localeplanet.com/java/ -var arabicLocales = exports.arabicLocales = ['AE', 'BH', 'DZ', 'EG', 'IQ', 'JO', 'KW', 'LB', 'LY', 'MA', 'QM', 'QA', 'SA', 'SD', 'SY', 'TN', 'YE']; + +var arabicLocales = ['AE', 'BH', 'DZ', 'EG', 'IQ', 'JO', 'KW', 'LB', 'LY', 'MA', 'QM', 'QA', 'SA', 'SD', 'SY', 'TN', 'YE']; +exports.arabicLocales = arabicLocales; for (var _locale, _i = 0; _i < arabicLocales.length; _i++) { - _locale = 'ar-' + arabicLocales[_i]; + _locale = "ar-".concat(arabicLocales[_i]); alpha[_locale] = alpha.ar; alphanumeric[_locale] = alphanumeric.ar; decimal[_locale] = decimal.ar; -} +} // Source: https://en.wikipedia.org/wiki/Decimal_mark + -// Source: https://en.wikipedia.org/wiki/Decimal_mark -var dotDecimal = exports.dotDecimal = []; -var commaDecimal = exports.commaDecimal = ['bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'es-ES', 'fr-FR', 'it-IT', 'ku-IQ', 'hu-HU', 'nb-NO', 'nn-NO', 'nl-NL', 'pl-PL', 'pt-PT', 'ru-RU', 'sl-SI', 'sr-RS@latin', 'sr-RS', 'sv-SE', 'tr-TR', 'uk-UA']; +var dotDecimal = []; +exports.dotDecimal = dotDecimal; +var commaDecimal = ['bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'es-ES', 'fr-FR', 'it-IT', 'ku-IQ', 'hu-HU', 'nb-NO', 'nn-NO', 'nl-NL', 'pl-PL', 'pt-PT', 'ru-RU', 'sl-SI', 'sr-RS@latin', 'sr-RS', 'sv-SE', 'tr-TR', 'uk-UA']; +exports.commaDecimal = commaDecimal; for (var _i2 = 0; _i2 < dotDecimal.length; _i2++) { decimal[dotDecimal[_i2]] = decimal['en-US']; @@ -97,9 +102,8 @@ for (var _i3 = 0; _i3 < commaDecimal.length; _i3++) { alpha['pt-BR'] = alpha['pt-PT']; alphanumeric['pt-BR'] = alphanumeric['pt-PT']; -decimal['pt-BR'] = decimal['pt-PT']; +decimal['pt-BR'] = decimal['pt-PT']; // see #862 -// see #862 alpha['pl-Pl'] = alpha['pl-PL']; alphanumeric['pl-Pl'] = alphanumeric['pl-PL']; decimal['pl-Pl'] = decimal['pl-PL']; \ No newline at end of file diff --git a/lib/blacklist.js b/lib/blacklist.js index 41ecdf0f6..226617c90 100644 --- a/lib/blacklist.js +++ b/lib/blacklist.js @@ -1,18 +1,17 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = blacklist; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function blacklist(str, chars) { - (0, _assertString2.default)(str); - return str.replace(new RegExp('[' + chars + ']+', 'g'), ''); + (0, _assertString.default)(str); + return str.replace(new RegExp("[".concat(chars, "]+"), 'g'), ''); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/contains.js b/lib/contains.js index 025e8012e..a3d285f2a 100644 --- a/lib/contains.js +++ b/lib/contains.js @@ -1,22 +1,19 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = contains; -var _assertString = require('./util/assertString'); +var _assertString = _interopRequireDefault(require("./util/assertString")); -var _assertString2 = _interopRequireDefault(_assertString); - -var _toString = require('./util/toString'); - -var _toString2 = _interopRequireDefault(_toString); +var _toString = _interopRequireDefault(require("./util/toString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function contains(str, elem) { - (0, _assertString2.default)(str); - return str.indexOf((0, _toString2.default)(elem)) >= 0; + (0, _assertString.default)(str); + return str.indexOf((0, _toString.default)(elem)) >= 0; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/equals.js b/lib/equals.js index 30ac76a05..2f1eb6bab 100644 --- a/lib/equals.js +++ b/lib/equals.js @@ -1,18 +1,17 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = equals; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function equals(str, comparison) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); return str === comparison; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/escape.js b/lib/escape.js index abcd60774..e092b2c1c 100644 --- a/lib/escape.js +++ b/lib/escape.js @@ -1,18 +1,17 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = escape; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function escape(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); return str.replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, ''').replace(//g, '>').replace(/\//g, '/').replace(/\\/g, '\').replace(/`/g, '`'); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isAfter.js b/lib/isAfter.js index 9c84d67cf..08fce4958 100644 --- a/lib/isAfter.js +++ b/lib/isAfter.js @@ -1,26 +1,22 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isAfter; -var _assertString = require('./util/assertString'); +var _assertString = _interopRequireDefault(require("./util/assertString")); -var _assertString2 = _interopRequireDefault(_assertString); - -var _toDate = require('./toDate'); - -var _toDate2 = _interopRequireDefault(_toDate); +var _toDate = _interopRequireDefault(require("./toDate")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isAfter(str) { var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : String(new Date()); - - (0, _assertString2.default)(str); - var comparison = (0, _toDate2.default)(date); - var original = (0, _toDate2.default)(str); + (0, _assertString.default)(str); + var comparison = (0, _toDate.default)(date); + var original = (0, _toDate.default)(str); return !!(original && comparison && original > comparison); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isAlpha.js b/lib/isAlpha.js index 8c7870859..503525453 100644 --- a/lib/isAlpha.js +++ b/lib/isAlpha.js @@ -1,27 +1,27 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.locales = undefined; exports.default = isAlpha; +exports.locales = void 0; -var _assertString = require('./util/assertString'); +var _assertString = _interopRequireDefault(require("./util/assertString")); -var _assertString2 = _interopRequireDefault(_assertString); - -var _alpha = require('./alpha'); +var _alpha = require("./alpha"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isAlpha(str) { var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-US'; + (0, _assertString.default)(str); - (0, _assertString2.default)(str); if (locale in _alpha.alpha) { return _alpha.alpha[locale].test(str); } - throw new Error('Invalid locale \'' + locale + '\''); + + throw new Error("Invalid locale '".concat(locale, "'")); } -var locales = exports.locales = Object.keys(_alpha.alpha); \ No newline at end of file +var locales = Object.keys(_alpha.alpha); +exports.locales = locales; \ No newline at end of file diff --git a/lib/isAlphanumeric.js b/lib/isAlphanumeric.js index aeeb5e6f1..33fc3c1ab 100644 --- a/lib/isAlphanumeric.js +++ b/lib/isAlphanumeric.js @@ -1,27 +1,27 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.locales = undefined; exports.default = isAlphanumeric; +exports.locales = void 0; -var _assertString = require('./util/assertString'); +var _assertString = _interopRequireDefault(require("./util/assertString")); -var _assertString2 = _interopRequireDefault(_assertString); - -var _alpha = require('./alpha'); +var _alpha = require("./alpha"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isAlphanumeric(str) { var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-US'; + (0, _assertString.default)(str); - (0, _assertString2.default)(str); if (locale in _alpha.alphanumeric) { return _alpha.alphanumeric[locale].test(str); } - throw new Error('Invalid locale \'' + locale + '\''); + + throw new Error("Invalid locale '".concat(locale, "'")); } -var locales = exports.locales = Object.keys(_alpha.alphanumeric); \ No newline at end of file +var locales = Object.keys(_alpha.alphanumeric); +exports.locales = locales; \ No newline at end of file diff --git a/lib/isAscii.js b/lib/isAscii.js index 55171e844..0c51d6831 100644 --- a/lib/isAscii.js +++ b/lib/isAscii.js @@ -1,13 +1,11 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isAscii; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -16,7 +14,8 @@ var ascii = /^[\x00-\x7F]+$/; /* eslint-enable no-control-regex */ function isAscii(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); return ascii.test(str); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isBase64.js b/lib/isBase64.js index 0b4a807f5..365c8e3c7 100644 --- a/lib/isBase64.js +++ b/lib/isBase64.js @@ -1,25 +1,26 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isBase64; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var notBase64 = /[^A-Z0-9+\/=]/i; function isBase64(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); var len = str.length; + if (!len || len % 4 !== 0 || notBase64.test(str)) { return false; } + var firstPaddingChar = str.indexOf('='); return firstPaddingChar === -1 || firstPaddingChar === len - 1 || firstPaddingChar === len - 2 && str[len - 1] === '='; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isBefore.js b/lib/isBefore.js index b4e3cf625..4fb745f0f 100644 --- a/lib/isBefore.js +++ b/lib/isBefore.js @@ -1,26 +1,22 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isBefore; -var _assertString = require('./util/assertString'); +var _assertString = _interopRequireDefault(require("./util/assertString")); -var _assertString2 = _interopRequireDefault(_assertString); - -var _toDate = require('./toDate'); - -var _toDate2 = _interopRequireDefault(_toDate); +var _toDate = _interopRequireDefault(require("./toDate")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isBefore(str) { var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : String(new Date()); - - (0, _assertString2.default)(str); - var comparison = (0, _toDate2.default)(date); - var original = (0, _toDate2.default)(str); + (0, _assertString.default)(str); + var comparison = (0, _toDate.default)(date); + var original = (0, _toDate.default)(str); return !!(original && comparison && original < comparison); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isBoolean.js b/lib/isBoolean.js index 7dbd26f8c..e56f81cec 100644 --- a/lib/isBoolean.js +++ b/lib/isBoolean.js @@ -1,18 +1,17 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isBoolean; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isBoolean(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); return ['true', 'false', '1', '0'].indexOf(str) >= 0; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isByteLength.js b/lib/isByteLength.js index 5ec897c6b..e867667f3 100644 --- a/lib/isByteLength.js +++ b/lib/isByteLength.js @@ -1,25 +1,23 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - exports.default = isByteLength; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + /* eslint-disable prefer-rest-params */ function isByteLength(str, options) { - (0, _assertString2.default)(str); - var min = void 0; - var max = void 0; - if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') { + (0, _assertString.default)(str); + var min; + var max; + + if (_typeof(options) === 'object') { min = options.min || 0; max = options.max; } else { @@ -27,7 +25,9 @@ function isByteLength(str, options) { min = arguments[1]; max = arguments[2]; } + var len = encodeURI(str).split(/%..|./).length - 1; return len >= min && (typeof max === 'undefined' || len <= max); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isCreditCard.js b/lib/isCreditCard.js index 8e94ca6b2..8cc31f1c8 100644 --- a/lib/isCreditCard.js +++ b/lib/isCreditCard.js @@ -1,13 +1,11 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isCreditCard; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -16,20 +14,25 @@ var creditCard = /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|(222[1-9]|22[3-9][ /* eslint-enable max-len */ function isCreditCard(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); var sanitized = str.replace(/[- ]+/g, ''); + if (!creditCard.test(sanitized)) { return false; } + var sum = 0; - var digit = void 0; - var tmpNum = void 0; - var shouldDouble = void 0; + var digit; + var tmpNum; + var shouldDouble; + for (var i = sanitized.length - 1; i >= 0; i--) { digit = sanitized.substring(i, i + 1); tmpNum = parseInt(digit, 10); + if (shouldDouble) { tmpNum *= 2; + if (tmpNum >= 10) { sum += tmpNum % 10 + 1; } else { @@ -38,8 +41,11 @@ function isCreditCard(str) { } else { sum += tmpNum; } + shouldDouble = !shouldDouble; } + return !!(sum % 10 === 0 ? sanitized : false); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isCurrency.js b/lib/isCurrency.js index 5be44ef75..47d8638a0 100644 --- a/lib/isCurrency.js +++ b/lib/isCurrency.js @@ -1,48 +1,43 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isCurrency; -var _merge = require('./util/merge'); +var _merge = _interopRequireDefault(require("./util/merge")); -var _merge2 = _interopRequireDefault(_merge); - -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function currencyRegex(options) { - var decimal_digits = '\\d{' + options.digits_after_decimal[0] + '}'; + var decimal_digits = "\\d{".concat(options.digits_after_decimal[0], "}"); options.digits_after_decimal.forEach(function (digit, index) { - if (index !== 0) decimal_digits = decimal_digits + '|\\d{' + digit + '}'; + if (index !== 0) decimal_digits = "".concat(decimal_digits, "|\\d{").concat(digit, "}"); }); - var symbol = '(\\' + options.symbol.replace(/\./g, '\\.') + ')' + (options.require_symbol ? '' : '?'), + var symbol = "(\\".concat(options.symbol.replace(/\./g, '\\.'), ")").concat(options.require_symbol ? '' : '?'), negative = '-?', whole_dollar_amount_without_sep = '[1-9]\\d*', - whole_dollar_amount_with_sep = '[1-9]\\d{0,2}(\\' + options.thousands_separator + '\\d{3})*', + whole_dollar_amount_with_sep = "[1-9]\\d{0,2}(\\".concat(options.thousands_separator, "\\d{3})*"), valid_whole_dollar_amounts = ['0', whole_dollar_amount_without_sep, whole_dollar_amount_with_sep], - whole_dollar_amount = '(' + valid_whole_dollar_amounts.join('|') + ')?', - decimal_amount = '(\\' + options.decimal_separator + '(' + decimal_digits + '))' + (options.require_decimal ? '' : '?'); - var pattern = whole_dollar_amount + (options.allow_decimal || options.require_decimal ? decimal_amount : ''); + whole_dollar_amount = "(".concat(valid_whole_dollar_amounts.join('|'), ")?"), + decimal_amount = "(\\".concat(options.decimal_separator, "(").concat(decimal_digits, "))").concat(options.require_decimal ? '' : '?'); + var pattern = whole_dollar_amount + (options.allow_decimal || options.require_decimal ? decimal_amount : ''); // default is negative sign before symbol, but there are two other options (besides parens) - // default is negative sign before symbol, but there are two other options (besides parens) if (options.allow_negatives && !options.parens_for_negatives) { if (options.negative_sign_after_digits) { pattern += negative; } else if (options.negative_sign_before_digits) { pattern = negative + pattern; } - } + } // South African Rand, for example, uses R 123 (space) and R-123 (no space) + - // South African Rand, for example, uses R 123 (space) and R-123 (no space) if (options.allow_negative_sign_placeholder) { - pattern = '( (?!\\-))?' + pattern; + pattern = "( (?!\\-))?".concat(pattern); } else if (options.allow_space_after_symbol) { - pattern = ' ?' + pattern; + pattern = " ?".concat(pattern); } else if (options.allow_space_after_digits) { pattern += '( (?!$))?'; } @@ -55,15 +50,15 @@ function currencyRegex(options) { if (options.allow_negatives) { if (options.parens_for_negatives) { - pattern = '(\\(' + pattern + '\\)|' + pattern + ')'; + pattern = "(\\(".concat(pattern, "\\)|").concat(pattern, ")"); } else if (!(options.negative_sign_before_digits || options.negative_sign_after_digits)) { pattern = negative + pattern; } - } - - // ensure there's a dollar and/or decimal amount, and that + } // ensure there's a dollar and/or decimal amount, and that // it doesn't start with a space or a negative sign followed by a space - return new RegExp('^(?!-? )(?=.*\\d)' + pattern + '$'); + + + return new RegExp("^(?!-? )(?=.*\\d)".concat(pattern, "$")); } var default_currency_options = { @@ -85,8 +80,9 @@ var default_currency_options = { }; function isCurrency(str, options) { - (0, _assertString2.default)(str); - options = (0, _merge2.default)(options, default_currency_options); + (0, _assertString.default)(str); + options = (0, _merge.default)(options, default_currency_options); return currencyRegex(options).test(str); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isDataURI.js b/lib/isDataURI.js index 34146adf2..ef7649206 100644 --- a/lib/isDataURI.js +++ b/lib/isDataURI.js @@ -1,49 +1,53 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isDataURI; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var validMediaType = /^[a-z]+\/[a-z0-9\-\+]+$/i; - var validAttribute = /^[a-z\-]+=[a-z0-9\-]+$/i; - var validData = /^[a-z0-9!\$&'\(\)\*\+,;=\-\._~:@\/\?%\s]*$/i; function isDataURI(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); var data = str.split(','); + if (data.length < 2) { return false; } + var attributes = data.shift().trim().split(';'); var schemeAndMediaType = attributes.shift(); + if (schemeAndMediaType.substr(0, 5) !== 'data:') { return false; } + var mediaType = schemeAndMediaType.substr(5); + if (mediaType !== '' && !validMediaType.test(mediaType)) { return false; } + for (var i = 0; i < attributes.length; i++) { - if (i === attributes.length - 1 && attributes[i].toLowerCase() === 'base64') { - // ok + if (i === attributes.length - 1 && attributes[i].toLowerCase() === 'base64') {// ok } else if (!validAttribute.test(attributes[i])) { return false; } } + for (var _i = 0; _i < data.length; _i++) { if (!validData.test(data[_i])) { return false; } } + return true; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isDecimal.js b/lib/isDecimal.js index 5408bda79..9972f125a 100644 --- a/lib/isDecimal.js +++ b/lib/isDecimal.js @@ -1,28 +1,22 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isDecimal; -var _merge = require('./util/merge'); +var _merge = _interopRequireDefault(require("./util/merge")); -var _merge2 = _interopRequireDefault(_merge); +var _assertString = _interopRequireDefault(require("./util/assertString")); -var _assertString = require('./util/assertString'); +var _includes = _interopRequireDefault(require("./util/includes")); -var _assertString2 = _interopRequireDefault(_assertString); - -var _includes = require('./util/includes'); - -var _includes2 = _interopRequireDefault(_includes); - -var _alpha = require('./alpha'); +var _alpha = require("./alpha"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function decimalRegExp(options) { - var regExp = new RegExp('^[-+]?([0-9]+)?(\\' + _alpha.decimal[options.locale] + '[0-9]{' + options.decimal_digits + '})' + (options.force_decimal ? '' : '?') + '$'); + var regExp = new RegExp("^[-+]?([0-9]+)?(\\".concat(_alpha.decimal[options.locale], "[0-9]{").concat(options.decimal_digits, "})").concat(options.force_decimal ? '' : '?', "$")); return regExp; } @@ -31,15 +25,17 @@ var default_decimal_options = { decimal_digits: '1,', locale: 'en-US' }; - var blacklist = ['', '-', '+']; function isDecimal(str, options) { - (0, _assertString2.default)(str); - options = (0, _merge2.default)(options, default_decimal_options); + (0, _assertString.default)(str); + options = (0, _merge.default)(options, default_decimal_options); + if (options.locale in _alpha.decimal) { - return !(0, _includes2.default)(blacklist, str.replace(/ /g, '')) && decimalRegExp(options).test(str); + return !(0, _includes.default)(blacklist, str.replace(/ /g, '')) && decimalRegExp(options).test(str); } - throw new Error('Invalid locale \'' + options.locale + '\''); + + throw new Error("Invalid locale '".concat(options.locale, "'")); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isDivisibleBy.js b/lib/isDivisibleBy.js index 133603999..50b645f5a 100644 --- a/lib/isDivisibleBy.js +++ b/lib/isDivisibleBy.js @@ -1,22 +1,19 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isDivisibleBy; -var _assertString = require('./util/assertString'); +var _assertString = _interopRequireDefault(require("./util/assertString")); -var _assertString2 = _interopRequireDefault(_assertString); - -var _toFloat = require('./toFloat'); - -var _toFloat2 = _interopRequireDefault(_toFloat); +var _toFloat = _interopRequireDefault(require("./toFloat")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isDivisibleBy(str, num) { - (0, _assertString2.default)(str); - return (0, _toFloat2.default)(str) % parseInt(num, 10) === 0; + (0, _assertString.default)(str); + return (0, _toFloat.default)(str) % parseInt(num, 10) === 0; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isEmail.js b/lib/isEmail.js index 5db4c4ae7..c7b65dae5 100644 --- a/lib/isEmail.js +++ b/lib/isEmail.js @@ -1,29 +1,19 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isEmail; -var _assertString = require('./util/assertString'); +var _assertString = _interopRequireDefault(require("./util/assertString")); -var _assertString2 = _interopRequireDefault(_assertString); +var _merge = _interopRequireDefault(require("./util/merge")); -var _merge = require('./util/merge'); +var _isByteLength = _interopRequireDefault(require("./isByteLength")); -var _merge2 = _interopRequireDefault(_merge); +var _isFQDN = _interopRequireDefault(require("./isFQDN")); -var _isByteLength = require('./isByteLength'); - -var _isByteLength2 = _interopRequireDefault(_isByteLength); - -var _isFQDN = require('./isFQDN'); - -var _isFQDN2 = _interopRequireDefault(_isFQDN); - -var _isIP = require('./isIP'); - -var _isIP2 = _interopRequireDefault(_isIP); +var _isIP = _interopRequireDefault(require("./isIP")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -33,9 +23,10 @@ var default_email_options = { allow_utf8_local_part: true, require_tld: true }; - /* eslint-disable max-len */ + /* eslint-disable no-control-regex */ + var displayName = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\,\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\s]*<(.+)>$/i; var emailUserPart = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i; var gmailUserPart = /^[a-z\d]+$/; @@ -43,14 +34,16 @@ var quotedEmailUser = /^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e var emailUserUtf8Part = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$/i; var quotedEmailUserUtf8 = /^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*$/i; /* eslint-enable max-len */ + /* eslint-enable no-control-regex */ function isEmail(str, options) { - (0, _assertString2.default)(str); - options = (0, _merge2.default)(options, default_email_options); + (0, _assertString.default)(str); + options = (0, _merge.default)(options, default_email_options); if (options.require_display_name || options.allow_display_name) { var display_email = str.match(displayName); + if (display_email) { str = display_email[1]; } else if (options.require_display_name) { @@ -61,7 +54,6 @@ function isEmail(str, options) { var parts = str.split('@'); var domain = parts.pop(); var user = parts.join('@'); - var lower_domain = domain.toLowerCase(); if (options.domain_specific_validation && (lower_domain === 'gmail.com' || lower_domain === 'googlemail.com')) { @@ -72,17 +64,19 @@ function isEmail(str, options) { Gmail only normalizes single dots, removing them from here is pointless, should be done in normalizeEmail */ - user = user.toLowerCase(); + user = user.toLowerCase(); // Removing sub-address from username before gmail validation - // Removing sub-address from username before gmail validation - var username = user.split('+')[0]; + var username = user.split('+')[0]; // Dots are not included in gmail length restriction - // Dots are not included in gmail length restriction - if (!(0, _isByteLength2.default)(username.replace('.', ''), { min: 6, max: 30 })) { + if (!(0, _isByteLength.default)(username.replace('.', ''), { + min: 6, + max: 30 + })) { return false; } var _user_parts = username.split('.'); + for (var i = 0; i < _user_parts.length; i++) { if (!gmailUserPart.test(_user_parts[i])) { return false; @@ -90,23 +84,29 @@ function isEmail(str, options) { } } - if (!(0, _isByteLength2.default)(user, { max: 64 }) || !(0, _isByteLength2.default)(domain, { max: 254 })) { + if (!(0, _isByteLength.default)(user, { + max: 64 + }) || !(0, _isByteLength.default)(domain, { + max: 254 + })) { return false; } - if (!(0, _isFQDN2.default)(domain, { require_tld: options.require_tld })) { + if (!(0, _isFQDN.default)(domain, { + require_tld: options.require_tld + })) { if (!options.allow_ip_domain) { return false; } - if (!(0, _isIP2.default)(domain)) { + if (!(0, _isIP.default)(domain)) { if (!domain.startsWith('[') || !domain.endsWith(']')) { return false; } var noBracketdomain = domain.substr(1, domain.length - 2); - if (noBracketdomain.length === 0 || !(0, _isIP2.default)(noBracketdomain)) { + if (noBracketdomain.length === 0 || !(0, _isIP.default)(noBracketdomain)) { return false; } } @@ -118,8 +118,8 @@ function isEmail(str, options) { } var pattern = options.allow_utf8_local_part ? emailUserUtf8Part : emailUserPart; - var user_parts = user.split('.'); + for (var _i = 0; _i < user_parts.length; _i++) { if (!pattern.test(user_parts[_i])) { return false; @@ -128,4 +128,5 @@ function isEmail(str, options) { return true; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isEmpty.js b/lib/isEmpty.js index fd1cab61d..7a4395b84 100644 --- a/lib/isEmpty.js +++ b/lib/isEmpty.js @@ -1,17 +1,13 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isEmpty; -var _assertString = require('./util/assertString'); +var _assertString = _interopRequireDefault(require("./util/assertString")); -var _assertString2 = _interopRequireDefault(_assertString); - -var _merge = require('./util/merge'); - -var _merge2 = _interopRequireDefault(_merge); +var _merge = _interopRequireDefault(require("./util/merge")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -20,9 +16,9 @@ var default_is_empty_options = { }; function isEmpty(str, options) { - (0, _assertString2.default)(str); - options = (0, _merge2.default)(options, default_is_empty_options); - + (0, _assertString.default)(str); + options = (0, _merge.default)(options, default_is_empty_options); return (options.ignore_whitespace ? str.trim().length : str.length) === 0; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isFQDN.js b/lib/isFQDN.js index 3cb4636b4..2f2d69582 100644 --- a/lib/isFQDN.js +++ b/lib/isFQDN.js @@ -1,17 +1,13 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isFQDN; -var _assertString = require('./util/assertString'); +var _assertString = _interopRequireDefault(require("./util/assertString")); -var _assertString2 = _interopRequireDefault(_assertString); - -var _merge = require('./util/merge'); - -var _merge2 = _interopRequireDefault(_merge); +var _merge = _interopRequireDefault(require("./util/merge")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -22,45 +18,57 @@ var default_fqdn_options = { }; function isFQDN(str, options) { - (0, _assertString2.default)(str); - options = (0, _merge2.default)(options, default_fqdn_options); - + (0, _assertString.default)(str); + options = (0, _merge.default)(options, default_fqdn_options); /* Remove the optional trailing dot before checking validity */ + if (options.allow_trailing_dot && str[str.length - 1] === '.') { str = str.substring(0, str.length - 1); } + var parts = str.split('.'); + for (var i = 0; i < parts.length; i++) { if (parts[i].length > 63) { return false; } } + if (options.require_tld) { var tld = parts.pop(); + if (!parts.length || !/^([a-z\u00a1-\uffff]{2,}|xn[a-z0-9-]{2,})$/i.test(tld)) { return false; - } - // disallow spaces + } // disallow spaces + + if (/[\s\u2002-\u200B\u202F\u205F\u3000\uFEFF\uDB40\uDC20]/.test(tld)) { return false; } } + for (var part, _i = 0; _i < parts.length; _i++) { part = parts[_i]; + if (options.allow_underscores) { part = part.replace(/_/g, ''); } + if (!/^[a-z\u00a1-\uffff0-9-]+$/i.test(part)) { return false; - } - // disallow full-width chars + } // disallow full-width chars + + if (/[\uff01-\uff5e]/.test(part)) { return false; } + if (part[0] === '-' || part[part.length - 1] === '-') { return false; } } + return true; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isFloat.js b/lib/isFloat.js index 5b6187489..3fdab8609 100644 --- a/lib/isFloat.js +++ b/lib/isFloat.js @@ -1,28 +1,29 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.locales = undefined; exports.default = isFloat; +exports.locales = void 0; -var _assertString = require('./util/assertString'); +var _assertString = _interopRequireDefault(require("./util/assertString")); -var _assertString2 = _interopRequireDefault(_assertString); - -var _alpha = require('./alpha'); +var _alpha = require("./alpha"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isFloat(str, options) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); options = options || {}; - var float = new RegExp('^(?:[-+])?(?:[0-9]+)?(?:\\' + (options.locale ? _alpha.decimal[options.locale] : '.') + '[0-9]*)?(?:[eE][\\+\\-]?(?:[0-9]+))?$'); + var float = new RegExp("^(?:[-+])?(?:[0-9]+)?(?:\\".concat(options.locale ? _alpha.decimal[options.locale] : '.', "[0-9]*)?(?:[eE][\\+\\-]?(?:[0-9]+))?$")); + if (str === '' || str === '.' || str === '-' || str === '+') { return false; } + var value = parseFloat(str.replace(',', '.')); return float.test(str) && (!options.hasOwnProperty('min') || value >= options.min) && (!options.hasOwnProperty('max') || value <= options.max) && (!options.hasOwnProperty('lt') || value < options.lt) && (!options.hasOwnProperty('gt') || value > options.gt); } -var locales = exports.locales = Object.keys(_alpha.decimal); \ No newline at end of file +var locales = Object.keys(_alpha.decimal); +exports.locales = locales; \ No newline at end of file diff --git a/lib/isFullWidth.js b/lib/isFullWidth.js index 4215f8186..1960f13c7 100644 --- a/lib/isFullWidth.js +++ b/lib/isFullWidth.js @@ -1,20 +1,19 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.fullWidth = undefined; exports.default = isFullWidth; +exports.fullWidth = void 0; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var fullWidth = exports.fullWidth = /[^\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/; +var fullWidth = /[^\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/; +exports.fullWidth = fullWidth; function isFullWidth(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); return fullWidth.test(str); } \ No newline at end of file diff --git a/lib/isHalfWidth.js b/lib/isHalfWidth.js index 986c63245..55a9e1a49 100644 --- a/lib/isHalfWidth.js +++ b/lib/isHalfWidth.js @@ -1,20 +1,19 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.halfWidth = undefined; exports.default = isHalfWidth; +exports.halfWidth = void 0; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var halfWidth = exports.halfWidth = /[\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/; +var halfWidth = /[\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/; +exports.halfWidth = halfWidth; function isHalfWidth(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); return halfWidth.test(str); } \ No newline at end of file diff --git a/lib/isHash.js b/lib/isHash.js index 32cc29b9f..c841c0180 100644 --- a/lib/isHash.js +++ b/lib/isHash.js @@ -1,13 +1,11 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isHash; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -28,8 +26,9 @@ var lengths = { }; function isHash(str, algorithm) { - (0, _assertString2.default)(str); - var hash = new RegExp('^[a-f0-9]{' + lengths[algorithm] + '}$'); + (0, _assertString.default)(str); + var hash = new RegExp("^[a-f0-9]{".concat(lengths[algorithm], "}$")); return hash.test(str); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isHexColor.js b/lib/isHexColor.js index 90634710c..f13956e92 100644 --- a/lib/isHexColor.js +++ b/lib/isHexColor.js @@ -1,20 +1,19 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isHexColor; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var hexcolor = /^#?([0-9A-F]{3}|[0-9A-F]{6})$/i; function isHexColor(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); return hexcolor.test(str); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isHexadecimal.js b/lib/isHexadecimal.js index fb7808f9d..8fe9a57f0 100644 --- a/lib/isHexadecimal.js +++ b/lib/isHexadecimal.js @@ -1,20 +1,19 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isHexadecimal; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var hexadecimal = /^[0-9A-F]+$/i; function isHexadecimal(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); return hexadecimal.test(str); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isIP.js b/lib/isIP.js index fce2ecbfb..8072fbf88 100644 --- a/lib/isIP.js +++ b/lib/isIP.js @@ -1,13 +1,11 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isIP; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -16,15 +14,16 @@ var ipv6Block = /^[0-9A-F]{1,4}$/i; function isIP(str) { var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; - - (0, _assertString2.default)(str); + (0, _assertString.default)(str); version = String(version); + if (!version) { return isIP(str, 4) || isIP(str, 6); } else if (version === '4') { if (!ipv4Maybe.test(str)) { return false; } + var parts = str.split('.').sort(function (a, b) { return a - b; }); @@ -32,18 +31,19 @@ function isIP(str) { } else if (version === '6') { var blocks = str.split(':'); var foundOmissionBlock = false; // marker to indicate :: - // At least some OS accept the last 32 bits of an IPv6 address // (i.e. 2 of the blocks) in IPv4 notation, and RFC 3493 says // that '::ffff:a.b.c.d' is valid for IPv4-mapped IPv6 addresses, // and '::a.b.c.d' is deprecated, but also valid. + var foundIPv4TransitionBlock = isIP(blocks[blocks.length - 1], 4); var expectedNumberOfBlocks = foundIPv4TransitionBlock ? 7 : 8; if (blocks.length > expectedNumberOfBlocks) { return false; - } - // initial or final :: + } // initial or final :: + + if (str === '::') { return true; } else if (str.substr(0, 2) === '::') { @@ -63,19 +63,23 @@ function isIP(str) { if (foundOmissionBlock) { return false; // multiple :: in address } + foundOmissionBlock = true; - } else if (foundIPv4TransitionBlock && i === blocks.length - 1) { - // it has been checked before that the last + } else if (foundIPv4TransitionBlock && i === blocks.length - 1) {// it has been checked before that the last // block is a valid IPv4 address } else if (!ipv6Block.test(blocks[i])) { return false; } } + if (foundOmissionBlock) { return blocks.length >= 1; } + return blocks.length === expectedNumberOfBlocks; } + return false; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isIPRange.js b/lib/isIPRange.js index cee7563a6..b638e34e6 100644 --- a/lib/isIPRange.js +++ b/lib/isIPRange.js @@ -1,40 +1,36 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isIPRange; -var _assertString = require('./util/assertString'); +var _assertString = _interopRequireDefault(require("./util/assertString")); -var _assertString2 = _interopRequireDefault(_assertString); - -var _isIP = require('./isIP'); - -var _isIP2 = _interopRequireDefault(_isIP); +var _isIP = _interopRequireDefault(require("./isIP")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var subnetMaybe = /^\d{1,2}$/; function isIPRange(str) { - (0, _assertString2.default)(str); - var parts = str.split('/'); + (0, _assertString.default)(str); + var parts = str.split('/'); // parts[0] -> ip, parts[1] -> subnet - // parts[0] -> ip, parts[1] -> subnet if (parts.length !== 2) { return false; } if (!subnetMaybe.test(parts[1])) { return false; - } + } // Disallow preceding 0 i.e. 01, 02, ... + - // Disallow preceding 0 i.e. 01, 02, ... if (parts[1].length > 1 && parts[1].startsWith('0')) { return false; } - return (0, _isIP2.default)(parts[0], 4) && parts[1] <= 32 && parts[1] >= 0; + return (0, _isIP.default)(parts[0], 4) && parts[1] <= 32 && parts[1] >= 0; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isISBN.js b/lib/isISBN.js index fccec2849..28be33ad5 100644 --- a/lib/isISBN.js +++ b/lib/isISBN.js @@ -1,13 +1,11 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isISBN; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -17,27 +15,32 @@ var factor = [1, 3]; function isISBN(str) { var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; - - (0, _assertString2.default)(str); + (0, _assertString.default)(str); version = String(version); + if (!version) { return isISBN(str, 10) || isISBN(str, 13); } + var sanitized = str.replace(/[\s-]+/g, ''); var checksum = 0; - var i = void 0; + var i; + if (version === '10') { if (!isbn10Maybe.test(sanitized)) { return false; } + for (i = 0; i < 9; i++) { checksum += (i + 1) * sanitized.charAt(i); } + if (sanitized.charAt(9) === 'X') { checksum += 10 * 10; } else { checksum += 10 * sanitized.charAt(9); } + if (checksum % 11 === 0) { return !!sanitized; } @@ -45,13 +48,17 @@ function isISBN(str) { if (!isbn13Maybe.test(sanitized)) { return false; } + for (i = 0; i < 12; i++) { checksum += factor[i % 2] * sanitized.charAt(i); } + if (sanitized.charAt(12) - (10 - checksum % 10) % 10 === 0) { return !!sanitized; } } + return false; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isISIN.js b/lib/isISIN.js index feb9725a7..01cbc0197 100644 --- a/lib/isISIN.js +++ b/lib/isISIN.js @@ -1,20 +1,19 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isISIN; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var isin = /^[A-Z]{2}[0-9A-Z]{9}[0-9]$/; function isISIN(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); + if (!isin.test(str)) { return false; } @@ -22,16 +21,18 @@ function isISIN(str) { var checksumStr = str.replace(/[A-Z]/g, function (character) { return parseInt(character, 36); }); - var sum = 0; - var digit = void 0; - var tmpNum = void 0; + var digit; + var tmpNum; var shouldDouble = true; + for (var i = checksumStr.length - 2; i >= 0; i--) { digit = checksumStr.substring(i, i + 1); tmpNum = parseInt(digit, 10); + if (shouldDouble) { tmpNum *= 2; + if (tmpNum >= 10) { sum += tmpNum + 1; } else { @@ -40,9 +41,11 @@ function isISIN(str) { } else { sum += tmpNum; } + shouldDouble = !shouldDouble; } return parseInt(str.substr(str.length - 1), 10) === (10000 - sum) % 10; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isISO31661Alpha2.js b/lib/isISO31661Alpha2.js index 2f75d4e2a..bcc458d6d 100644 --- a/lib/isISO31661Alpha2.js +++ b/lib/isISO31661Alpha2.js @@ -1,17 +1,13 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isISO31661Alpha2; -var _assertString = require('./util/assertString'); +var _assertString = _interopRequireDefault(require("./util/assertString")); -var _assertString2 = _interopRequireDefault(_assertString); - -var _includes = require('./util/includes'); - -var _includes2 = _interopRequireDefault(_includes); +var _includes = _interopRequireDefault(require("./util/includes")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -19,7 +15,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var validISO31661Alpha2CountriesCodes = ['AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BR', 'BS', 'BT', 'BV', 'BW', 'BY', 'BZ', 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'FI', 'FJ', 'FK', 'FM', 'FO', 'FR', 'GA', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', 'GT', 'GU', 'GW', 'GY', 'HK', 'HM', 'HN', 'HR', 'HT', 'HU', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT', 'JE', 'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY', 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ', 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ', 'OM', 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY', 'QA', 'RE', 'RO', 'RS', 'RU', 'RW', 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', 'SZ', 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ', 'UA', 'UG', 'UM', 'US', 'UY', 'UZ', 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU', 'WF', 'WS', 'YE', 'YT', 'ZA', 'ZM', 'ZW']; function isISO31661Alpha2(str) { - (0, _assertString2.default)(str); - return (0, _includes2.default)(validISO31661Alpha2CountriesCodes, str.toUpperCase()); + (0, _assertString.default)(str); + return (0, _includes.default)(validISO31661Alpha2CountriesCodes, str.toUpperCase()); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isISO31661Alpha3.js b/lib/isISO31661Alpha3.js index 881e70637..ef16660b2 100644 --- a/lib/isISO31661Alpha3.js +++ b/lib/isISO31661Alpha3.js @@ -1,17 +1,13 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isISO31661Alpha3; -var _assertString = require('./util/assertString'); +var _assertString = _interopRequireDefault(require("./util/assertString")); -var _assertString2 = _interopRequireDefault(_assertString); - -var _includes = require('./util/includes'); - -var _includes2 = _interopRequireDefault(_includes); +var _includes = _interopRequireDefault(require("./util/includes")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -19,7 +15,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var validISO31661Alpha3CountriesCodes = ['AFG', 'ALA', 'ALB', 'DZA', 'ASM', 'AND', 'AGO', 'AIA', 'ATA', 'ATG', 'ARG', 'ARM', 'ABW', 'AUS', 'AUT', 'AZE', 'BHS', 'BHR', 'BGD', 'BRB', 'BLR', 'BEL', 'BLZ', 'BEN', 'BMU', 'BTN', 'BOL', 'BES', 'BIH', 'BWA', 'BVT', 'BRA', 'IOT', 'BRN', 'BGR', 'BFA', 'BDI', 'KHM', 'CMR', 'CAN', 'CPV', 'CYM', 'CAF', 'TCD', 'CHL', 'CHN', 'CXR', 'CCK', 'COL', 'COM', 'COG', 'COD', 'COK', 'CRI', 'CIV', 'HRV', 'CUB', 'CUW', 'CYP', 'CZE', 'DNK', 'DJI', 'DMA', 'DOM', 'ECU', 'EGY', 'SLV', 'GNQ', 'ERI', 'EST', 'ETH', 'FLK', 'FRO', 'FJI', 'FIN', 'FRA', 'GUF', 'PYF', 'ATF', 'GAB', 'GMB', 'GEO', 'DEU', 'GHA', 'GIB', 'GRC', 'GRL', 'GRD', 'GLP', 'GUM', 'GTM', 'GGY', 'GIN', 'GNB', 'GUY', 'HTI', 'HMD', 'VAT', 'HND', 'HKG', 'HUN', 'ISL', 'IND', 'IDN', 'IRN', 'IRQ', 'IRL', 'IMN', 'ISR', 'ITA', 'JAM', 'JPN', 'JEY', 'JOR', 'KAZ', 'KEN', 'KIR', 'PRK', 'KOR', 'KWT', 'KGZ', 'LAO', 'LVA', 'LBN', 'LSO', 'LBR', 'LBY', 'LIE', 'LTU', 'LUX', 'MAC', 'MKD', 'MDG', 'MWI', 'MYS', 'MDV', 'MLI', 'MLT', 'MHL', 'MTQ', 'MRT', 'MUS', 'MYT', 'MEX', 'FSM', 'MDA', 'MCO', 'MNG', 'MNE', 'MSR', 'MAR', 'MOZ', 'MMR', 'NAM', 'NRU', 'NPL', 'NLD', 'NCL', 'NZL', 'NIC', 'NER', 'NGA', 'NIU', 'NFK', 'MNP', 'NOR', 'OMN', 'PAK', 'PLW', 'PSE', 'PAN', 'PNG', 'PRY', 'PER', 'PHL', 'PCN', 'POL', 'PRT', 'PRI', 'QAT', 'REU', 'ROU', 'RUS', 'RWA', 'BLM', 'SHN', 'KNA', 'LCA', 'MAF', 'SPM', 'VCT', 'WSM', 'SMR', 'STP', 'SAU', 'SEN', 'SRB', 'SYC', 'SLE', 'SGP', 'SXM', 'SVK', 'SVN', 'SLB', 'SOM', 'ZAF', 'SGS', 'SSD', 'ESP', 'LKA', 'SDN', 'SUR', 'SJM', 'SWZ', 'SWE', 'CHE', 'SYR', 'TWN', 'TJK', 'TZA', 'THA', 'TLS', 'TGO', 'TKL', 'TON', 'TTO', 'TUN', 'TUR', 'TKM', 'TCA', 'TUV', 'UGA', 'UKR', 'ARE', 'GBR', 'USA', 'UMI', 'URY', 'UZB', 'VUT', 'VEN', 'VNM', 'VGB', 'VIR', 'WLF', 'ESH', 'YEM', 'ZMB', 'ZWE']; function isISO31661Alpha3(str) { - (0, _assertString2.default)(str); - return (0, _includes2.default)(validISO31661Alpha3CountriesCodes, str.toUpperCase()); + (0, _assertString.default)(str); + return (0, _includes.default)(validISO31661Alpha3CountriesCodes, str.toUpperCase()); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isISO8601.js b/lib/isISO8601.js index c37cf6d7f..a57f018b7 100644 --- a/lib/isISO8601.js +++ b/lib/isISO8601.js @@ -1,13 +1,11 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isISO8601; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -15,39 +13,43 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de // from http://goo.gl/0ejHHW var iso8601 = /^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/; /* eslint-enable max-len */ + var isValidDate = function isValidDate(str) { // str must have passed the ISO8601 check // this check is meant to catch invalid dates // like 2009-02-31 // first check for ordinal dates var ordinalMatch = str.match(/^(\d{4})-?(\d{3})([ T]{1}\.*|$)/); + if (ordinalMatch) { var oYear = Number(ordinalMatch[1]); - var oDay = Number(ordinalMatch[2]); - // if is leap year - if (oYear % 4 === 0 && oYear % 100 !== 0) { - return oDay <= 366; - } + var oDay = Number(ordinalMatch[2]); // if is leap year + + if (oYear % 4 === 0 && oYear % 100 !== 0) return oDay <= 366; return oDay <= 365; } + var match = str.match(/(\d{4})-?(\d{0,2})-?(\d*)/).map(Number); var year = match[1]; var month = match[2]; - var day = match[3]; - // create a date object and compare - var d = new Date(year + '-' + (month || 1) + '-' + (day || 1)); + var day = match[3]; // create a date object and compare + + var d = new Date("".concat(year, "-").concat(month || 1, "-").concat(day || 1)); if (isNaN(d.getFullYear())) return false; + if (month && day) { return d.getFullYear() === year && d.getMonth() + 1 === month && d.getDate() === day; } + return true; }; function isISO8601(str, options) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); var check = iso8601.test(str); if (!options) return check; if (check && options.strict) return isValidDate(str); return check; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isISRC.js b/lib/isISRC.js index b567cec43..fef9dedb5 100644 --- a/lib/isISRC.js +++ b/lib/isISRC.js @@ -1,13 +1,11 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isISRC; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -15,7 +13,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var isrc = /^[A-Z]{2}[0-9A-Z]{3}\d{2}\d{5}$/; function isISRC(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); return isrc.test(str); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isISSN.js b/lib/isISSN.js index 463af7392..3ab4bc19d 100644 --- a/lib/isISSN.js +++ b/lib/isISSN.js @@ -1,13 +1,11 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isISSN; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -15,20 +13,24 @@ var issn = '^\\d{4}-?\\d{3}[\\dX]$'; function isISSN(str) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - (0, _assertString2.default)(str); + (0, _assertString.default)(str); var testIssn = issn; testIssn = options.require_hyphen ? testIssn.replace('?', '') : testIssn; testIssn = options.case_sensitive ? new RegExp(testIssn) : new RegExp(testIssn, 'i'); + if (!testIssn.test(str)) { return false; } + var digits = str.replace('-', '').toUpperCase(); var checksum = 0; + for (var i = 0; i < digits.length; i++) { var digit = digits[i]; checksum += (digit === 'X' ? 10 : +digit) * (8 - i); } + return checksum % 11 === 0; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isIdentityCard.js b/lib/isIdentityCard.js index 33aa9bb32..0892ec17f 100644 --- a/lib/isIdentityCard.js +++ b/lib/isIdentityCard.js @@ -1,64 +1,60 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isIdentityCard; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var validators = { ES: function ES(str) { - (0, _assertString2.default)(str); - + (0, _assertString.default)(str); var DNI = /^[0-9X-Z][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/; - var charsValue = { X: 0, Y: 1, Z: 2 }; + var controlDigits = ['T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E']; // sanitize user input - var controlDigits = ['T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E']; + var sanitized = str.trim().toUpperCase(); // validate the data structure - // sanitize user input - var sanitized = str.trim().toUpperCase(); - - // validate the data structure if (!DNI.test(sanitized)) { return false; - } + } // validate the control digit + - // validate the control digit var number = sanitized.slice(0, -1).replace(/[X,Y,Z]/g, function (char) { return charsValue[char]; }); - return sanitized.endsWith(controlDigits[number % 23]); } }; function isIdentityCard(str) { var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'any'; + (0, _assertString.default)(str); - (0, _assertString2.default)(str); if (locale in validators) { return validators[locale](str); } else if (locale === 'any') { for (var key in validators) { if (validators.hasOwnProperty(key)) { var validator = validators[key]; + if (validator(str)) { return true; } } } + return false; } - throw new Error('Invalid locale \'' + locale + '\''); + + throw new Error("Invalid locale '".concat(locale, "'")); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isIn.js b/lib/isIn.js index 14aecde40..3d8cafe6e 100644 --- a/lib/isIn.js +++ b/lib/isIn.js @@ -1,39 +1,39 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - exports.default = isIn; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); -var _toString = require('./util/toString'); - -var _toString2 = _interopRequireDefault(_toString); +var _toString = _interopRequireDefault(require("./util/toString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + function isIn(str, options) { - (0, _assertString2.default)(str); - var i = void 0; + (0, _assertString.default)(str); + var i; + if (Object.prototype.toString.call(options) === '[object Array]') { var array = []; + for (i in options) { if ({}.hasOwnProperty.call(options, i)) { - array[i] = (0, _toString2.default)(options[i]); + array[i] = (0, _toString.default)(options[i]); } } + return array.indexOf(str) >= 0; - } else if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') { + } else if (_typeof(options) === 'object') { return options.hasOwnProperty(str); } else if (options && typeof options.indexOf === 'function') { return options.indexOf(str) >= 0; } + return false; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isInt.js b/lib/isInt.js index 45a136700..911e6a99f 100644 --- a/lib/isInt.js +++ b/lib/isInt.js @@ -1,13 +1,11 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isInt; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -15,19 +13,17 @@ var int = /^(?:[-+]?(?:0|[1-9][0-9]*))$/; var intLeadingZeroes = /^[-+]?[0-9]+$/; function isInt(str, options) { - (0, _assertString2.default)(str); - options = options || {}; - - // Get the regex to use for testing, based on whether + (0, _assertString.default)(str); + options = options || {}; // Get the regex to use for testing, based on whether // leading zeroes are allowed or not. - var regex = options.hasOwnProperty('allow_leading_zeroes') && !options.allow_leading_zeroes ? int : intLeadingZeroes; - // Check min/max/lt/gt + var regex = options.hasOwnProperty('allow_leading_zeroes') && !options.allow_leading_zeroes ? int : intLeadingZeroes; // Check min/max/lt/gt + var minCheckPassed = !options.hasOwnProperty('min') || str >= options.min; var maxCheckPassed = !options.hasOwnProperty('max') || str <= options.max; var ltCheckPassed = !options.hasOwnProperty('lt') || str < options.lt; var gtCheckPassed = !options.hasOwnProperty('gt') || str > options.gt; - return regex.test(str) && minCheckPassed && maxCheckPassed && ltCheckPassed && gtCheckPassed; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isJSON.js b/lib/isJSON.js index 3d432c7e0..d21463d32 100644 --- a/lib/isJSON.js +++ b/lib/isJSON.js @@ -1,25 +1,27 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - exports.default = isJSON; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + function isJSON(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); + try { var obj = JSON.parse(str); - return !!obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object'; - } catch (e) {/* ignore */} + return !!obj && _typeof(obj) === 'object'; + } catch (e) { + /* ignore */ + } + return false; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isJWT.js b/lib/isJWT.js index edee030e5..a957bc8a1 100644 --- a/lib/isJWT.js +++ b/lib/isJWT.js @@ -1,20 +1,19 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isJWT; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var jwt = /^([A-Za-z0-9\-_~+\/]+[=]{0,2})\.([A-Za-z0-9\-_~+\/]+[=]{0,2})(?:\.([A-Za-z0-9\-_~+\/]+[=]{0,2}))?$/; function isJWT(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); return jwt.test(str); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isLatLong.js b/lib/isLatLong.js index 230d9ad58..c658714b8 100644 --- a/lib/isLatLong.js +++ b/lib/isLatLong.js @@ -1,23 +1,22 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = _default; -exports.default = function (str) { - (0, _assertString2.default)(str); - if (!str.includes(',')) return false; - var pair = str.split(','); - return lat.test(pair[0]) && long.test(pair[1]); -}; - -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var lat = /^\(?[+-]?(90(\.0+)?|[1-8]?\d(\.\d+)?)$/; var long = /^\s?[+-]?(180(\.0+)?|1[0-7]\d(\.\d+)?|\d{1,2}(\.\d+)?)\)?$/; -module.exports = exports['default']; \ No newline at end of file +function _default(str) { + (0, _assertString.default)(str); + if (!str.includes(',')) return false; + var pair = str.split(','); + return lat.test(pair[0]) && long.test(pair[1]); +} + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isLength.js b/lib/isLength.js index 432819029..e5f8ff8b3 100644 --- a/lib/isLength.js +++ b/lib/isLength.js @@ -1,25 +1,23 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - exports.default = isLength; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + /* eslint-disable prefer-rest-params */ function isLength(str, options) { - (0, _assertString2.default)(str); - var min = void 0; - var max = void 0; - if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') { + (0, _assertString.default)(str); + var min; + var max; + + if (_typeof(options) === 'object') { min = options.min || 0; max = options.max; } else { @@ -27,8 +25,10 @@ function isLength(str, options) { min = arguments[1]; max = arguments[2]; } + var surrogatePairs = str.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g) || []; var len = str.length - surrogatePairs.length; return len >= min && (typeof max === 'undefined' || len <= max); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isLowercase.js b/lib/isLowercase.js index 556ec6712..708a9b7e7 100644 --- a/lib/isLowercase.js +++ b/lib/isLowercase.js @@ -1,18 +1,17 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isLowercase; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isLowercase(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); return str === str.toLowerCase(); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isMACAddress.js b/lib/isMACAddress.js index 38c12645d..759e004d7 100644 --- a/lib/isMACAddress.js +++ b/lib/isMACAddress.js @@ -1,13 +1,11 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isMACAddress; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -15,10 +13,13 @@ var macAddress = /^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$/; var macAddressNoColons = /^([0-9a-fA-F]){12}$/; function isMACAddress(str, options) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); + if (options && options.no_colons) { return macAddressNoColons.test(str); } + return macAddress.test(str); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isMD5.js b/lib/isMD5.js index 6de9d17fc..fcafab992 100644 --- a/lib/isMD5.js +++ b/lib/isMD5.js @@ -1,20 +1,19 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isMD5; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var md5 = /^[a-f0-9]{32}$/; function isMD5(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); return md5.test(str); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isMagnetURI.js b/lib/isMagnetURI.js index ff260d88d..39d6f2466 100644 --- a/lib/isMagnetURI.js +++ b/lib/isMagnetURI.js @@ -1,20 +1,19 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isMagnetURI; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var magnetURI = /^magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32,40}&dn=.+&tr=.+$/i; function isMagnetURI(url) { - (0, _assertString2.default)(url); + (0, _assertString.default)(url); return magnetURI.test(url.trim()); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isMimeType.js b/lib/isMimeType.js index c0d6170fb..4c1ff92c0 100644 --- a/lib/isMimeType.js +++ b/lib/isMimeType.js @@ -1,13 +1,11 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isMimeType; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -32,21 +30,21 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de - https://tools.ietf.org/html/rfc7231#section-3.1.1.1 - https://tools.ietf.org/html/rfc7231#section-3.1.1.5 */ - // Match simple MIME types // NB : // Subtype length must not exceed 100 characters. // This rule does not comply to the RFC specs (what is the max length ?). var mimeTypeSimple = /^(application|audio|font|image|message|model|multipart|text|video)\/[a-zA-Z0-9\.\-\+]{1,100}$/i; // eslint-disable-line max-len - // Handle "charset" in "text/*" -var mimeTypeText = /^text\/[a-zA-Z0-9\.\-\+]{1,100};\s?charset=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?$/i; // eslint-disable-line max-len +var mimeTypeText = /^text\/[a-zA-Z0-9\.\-\+]{1,100};\s?charset=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?$/i; // eslint-disable-line max-len // Handle "boundary" in "multipart/*" + var mimeTypeMultipart = /^multipart\/[a-zA-Z0-9\.\-\+]{1,100}(;\s?(boundary|charset)=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?){0,2}$/i; // eslint-disable-line max-len function isMimeType(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); return mimeTypeSimple.test(str) || mimeTypeText.test(str) || mimeTypeMultipart.test(str); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isMobilePhone.js b/lib/isMobilePhone.js index 750c8c660..2bcb516c6 100644 --- a/lib/isMobilePhone.js +++ b/lib/isMobilePhone.js @@ -1,14 +1,12 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.locales = undefined; exports.default = isMobilePhone; +exports.locales = void 0; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -83,42 +81,49 @@ var phones = { 'zh-TW': /^(\+?886\-?|0)?9\d{8}$/ }; /* eslint-enable max-len */ - // aliases + phones['en-CA'] = phones['en-US']; phones['fr-BE'] = phones['nl-BE']; phones['zh-HK'] = phones['en-HK']; function isMobilePhone(str, locale, options) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); + if (options && options.strictMode && !str.startsWith('+')) { return false; } + if (Array.isArray(locale)) { return locale.some(function (key) { if (phones.hasOwnProperty(key)) { var phone = phones[key]; + if (phone.test(str)) { return true; } } + return false; }); } else if (locale in phones) { - return phones[locale].test(str); - // alias falsey locale as 'any' + return phones[locale].test(str); // alias falsey locale as 'any' } else if (!locale || locale === 'any') { for (var key in phones) { if (phones.hasOwnProperty(key)) { var phone = phones[key]; + if (phone.test(str)) { return true; } } } + return false; } - throw new Error('Invalid locale \'' + locale + '\''); + + throw new Error("Invalid locale '".concat(locale, "'")); } -var locales = exports.locales = Object.keys(phones); \ No newline at end of file +var locales = Object.keys(phones); +exports.locales = locales; \ No newline at end of file diff --git a/lib/isMongoId.js b/lib/isMongoId.js index 62646bf41..6119c1bf1 100644 --- a/lib/isMongoId.js +++ b/lib/isMongoId.js @@ -1,22 +1,19 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isMongoId; -var _assertString = require('./util/assertString'); +var _assertString = _interopRequireDefault(require("./util/assertString")); -var _assertString2 = _interopRequireDefault(_assertString); - -var _isHexadecimal = require('./isHexadecimal'); - -var _isHexadecimal2 = _interopRequireDefault(_isHexadecimal); +var _isHexadecimal = _interopRequireDefault(require("./isHexadecimal")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isMongoId(str) { - (0, _assertString2.default)(str); - return (0, _isHexadecimal2.default)(str) && str.length === 24; + (0, _assertString.default)(str); + return (0, _isHexadecimal.default)(str) && str.length === 24; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isMultibyte.js b/lib/isMultibyte.js index 3411baab0..43e329f64 100644 --- a/lib/isMultibyte.js +++ b/lib/isMultibyte.js @@ -1,13 +1,11 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isMultibyte; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -16,7 +14,8 @@ var multibyte = /[^\x00-\x7F]/; /* eslint-enable no-control-regex */ function isMultibyte(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); return multibyte.test(str); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isNumeric.js b/lib/isNumeric.js index 13a32a770..84f01588d 100644 --- a/lib/isNumeric.js +++ b/lib/isNumeric.js @@ -1,13 +1,11 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isNumeric; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -15,10 +13,13 @@ var numeric = /^[+-]?([0-9]*[.])?[0-9]+$/; var numericNoSymbols = /^[0-9]+$/; function isNumeric(str, options) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); + if (options && options.no_symbols) { return numericNoSymbols.test(str); } + return numeric.test(str); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isPort.js b/lib/isPort.js index 66e119656..8a2dd56cd 100644 --- a/lib/isPort.js +++ b/lib/isPort.js @@ -1,17 +1,19 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isPort; -var _isInt = require('./isInt'); - -var _isInt2 = _interopRequireDefault(_isInt); +var _isInt = _interopRequireDefault(require("./isInt")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isPort(str) { - return (0, _isInt2.default)(str, { min: 0, max: 65535 }); + return (0, _isInt.default)(str, { + min: 0, + max: 65535 + }); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isPostalCode.js b/lib/isPostalCode.js index a6fe0cba8..4f48cad29 100644 --- a/lib/isPostalCode.js +++ b/lib/isPostalCode.js @@ -1,31 +1,12 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.locales = undefined; +exports.default = _default; +exports.locales = void 0; -exports.default = function (str, locale) { - (0, _assertString2.default)(str); - if (locale in patterns) { - return patterns[locale].test(str); - } else if (locale === 'any') { - for (var key in patterns) { - if (patterns.hasOwnProperty(key)) { - var pattern = patterns[key]; - if (pattern.test(str)) { - return true; - } - } - } - return false; - } - throw new Error('Invalid locale \'' + locale + '\''); -}; - -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -34,7 +15,6 @@ var threeDigit = /^\d{3}$/; var fourDigit = /^\d{4}$/; var fiveDigit = /^\d{5}$/; var sixDigit = /^\d{6}$/; - var patterns = { AD: /^AD\d{3}$/, AT: fourDigit, @@ -82,5 +62,27 @@ var patterns = { ZA: fourDigit, ZM: fiveDigit }; +var locales = Object.keys(patterns); +exports.locales = locales; + +function _default(str, locale) { + (0, _assertString.default)(str); + + if (locale in patterns) { + return patterns[locale].test(str); + } else if (locale === 'any') { + for (var key in patterns) { + if (patterns.hasOwnProperty(key)) { + var pattern = patterns[key]; + + if (pattern.test(str)) { + return true; + } + } + } + + return false; + } -var locales = exports.locales = Object.keys(patterns); \ No newline at end of file + throw new Error("Invalid locale '".concat(locale, "'")); +} \ No newline at end of file diff --git a/lib/isRFC3339.js b/lib/isRFC3339.js index 7feda3990..871856a1b 100644 --- a/lib/isRFC3339.js +++ b/lib/isRFC3339.js @@ -1,39 +1,32 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isRFC3339; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* Based on https://tools.ietf.org/html/rfc3339#section-5.6 */ - var dateFullYear = /[0-9]{4}/; var dateMonth = /(0[1-9]|1[0-2])/; var dateMDay = /([12]\d|0[1-9]|3[01])/; - var timeHour = /([01][0-9]|2[0-3])/; var timeMinute = /[0-5][0-9]/; var timeSecond = /([0-5][0-9]|60)/; - var timeSecFrac = /(\.[0-9]+)?/; -var timeNumOffset = new RegExp('[-+]' + timeHour.source + ':' + timeMinute.source); -var timeOffset = new RegExp('([zZ]|' + timeNumOffset.source + ')'); - -var partialTime = new RegExp(timeHour.source + ':' + timeMinute.source + ':' + timeSecond.source + timeSecFrac.source); - -var fullDate = new RegExp(dateFullYear.source + '-' + dateMonth.source + '-' + dateMDay.source); -var fullTime = new RegExp('' + partialTime.source + timeOffset.source); - -var rfc3339 = new RegExp(fullDate.source + '[ tT]' + fullTime.source); +var timeNumOffset = new RegExp("[-+]".concat(timeHour.source, ":").concat(timeMinute.source)); +var timeOffset = new RegExp("([zZ]|".concat(timeNumOffset.source, ")")); +var partialTime = new RegExp("".concat(timeHour.source, ":").concat(timeMinute.source, ":").concat(timeSecond.source).concat(timeSecFrac.source)); +var fullDate = new RegExp("".concat(dateFullYear.source, "-").concat(dateMonth.source, "-").concat(dateMDay.source)); +var fullTime = new RegExp("".concat(partialTime.source).concat(timeOffset.source)); +var rfc3339 = new RegExp("".concat(fullDate.source, "[ tT]").concat(fullTime.source)); function isRFC3339(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); return rfc3339.test(str); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isSurrogatePair.js b/lib/isSurrogatePair.js index d8c7a9d2d..e9c7af973 100644 --- a/lib/isSurrogatePair.js +++ b/lib/isSurrogatePair.js @@ -1,20 +1,19 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isSurrogatePair; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var surrogatePair = /[\uD800-\uDBFF][\uDC00-\uDFFF]/; function isSurrogatePair(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); return surrogatePair.test(str); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isURL.js b/lib/isURL.js index bb603f673..7025bb331 100644 --- a/lib/isURL.js +++ b/lib/isURL.js @@ -1,25 +1,17 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isURL; -var _assertString = require('./util/assertString'); +var _assertString = _interopRequireDefault(require("./util/assertString")); -var _assertString2 = _interopRequireDefault(_assertString); +var _isFQDN = _interopRequireDefault(require("./isFQDN")); -var _isFQDN = require('./isFQDN'); +var _isIP = _interopRequireDefault(require("./isIP")); -var _isFQDN2 = _interopRequireDefault(_isFQDN); - -var _isIP = require('./isIP'); - -var _isIP2 = _interopRequireDefault(_isIP); - -var _merge = require('./util/merge'); - -var _merge2 = _interopRequireDefault(_merge); +var _merge = _interopRequireDefault(require("./util/merge")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -33,7 +25,6 @@ var default_url_options = { allow_trailing_dot: false, allow_protocol_relative_urls: false }; - var wrapped_ipv6 = /^\[([^\]]+)\](?::([0-9]+))?$/; function isRegExp(obj) { @@ -43,40 +34,37 @@ function isRegExp(obj) { function checkHost(host, matches) { for (var i = 0; i < matches.length; i++) { var match = matches[i]; + if (host === match || isRegExp(match) && match.test(host)) { return true; } } + return false; } function isURL(url, options) { - (0, _assertString2.default)(url); + (0, _assertString.default)(url); + if (!url || url.length >= 2083 || /[\s<>]/.test(url)) { return false; } + if (url.indexOf('mailto:') === 0) { return false; } - options = (0, _merge2.default)(options, default_url_options); - var protocol = void 0, - auth = void 0, - host = void 0, - hostname = void 0, - port = void 0, - port_str = void 0, - split = void 0, - ipv6 = void 0; + options = (0, _merge.default)(options, default_url_options); + var protocol, auth, host, hostname, port, port_str, split, ipv6; split = url.split('#'); url = split.shift(); - split = url.split('?'); url = split.shift(); - split = url.split('://'); + if (split.length > 1) { protocol = split.shift().toLowerCase(); + if (options.require_valid_protocol && options.protocols.indexOf(protocol) === -1) { return false; } @@ -86,8 +74,10 @@ function isURL(url, options) { if (!options.allow_protocol_relative_urls) { return false; } + split[0] = url.substr(2); } + url = split.join('://'); if (url === '') { @@ -102,20 +92,24 @@ function isURL(url, options) { } split = url.split('@'); + if (split.length > 1) { if (options.disallow_auth) { return false; } + auth = split.shift(); + if (auth.indexOf(':') >= 0 && auth.split(':').length > 2) { return false; } } - hostname = split.join('@'); + hostname = split.join('@'); port_str = null; ipv6 = null; var ipv6_match = hostname.match(wrapped_ipv6); + if (ipv6_match) { host = ''; ipv6 = ipv6_match[1]; @@ -123,6 +117,7 @@ function isURL(url, options) { } else { split = hostname.split(':'); host = split.shift(); + if (split.length) { port_str = split.join(':'); } @@ -130,12 +125,13 @@ function isURL(url, options) { if (port_str !== null) { port = parseInt(port_str, 10); + if (!/^[0-9]+$/.test(port_str) || port <= 0 || port > 65535) { return false; } } - if (!(0, _isIP2.default)(host) && !(0, _isFQDN2.default)(host, options) && (!ipv6 || !(0, _isIP2.default)(ipv6, 6))) { + if (!(0, _isIP.default)(host) && !(0, _isFQDN.default)(host, options) && (!ipv6 || !(0, _isIP.default)(ipv6, 6))) { return false; } @@ -144,10 +140,12 @@ function isURL(url, options) { if (options.host_whitelist && !checkHost(host, options.host_whitelist)) { return false; } + if (options.host_blacklist && checkHost(host, options.host_blacklist)) { return false; } return true; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isUUID.js b/lib/isUUID.js index d37414457..b82cc34dd 100644 --- a/lib/isUUID.js +++ b/lib/isUUID.js @@ -1,13 +1,11 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isUUID; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -20,9 +18,9 @@ var uuid = { function isUUID(str) { var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'all'; - - (0, _assertString2.default)(str); + (0, _assertString.default)(str); var pattern = uuid[version]; return pattern && pattern.test(str); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isUppercase.js b/lib/isUppercase.js index c4f11ebdb..918421040 100644 --- a/lib/isUppercase.js +++ b/lib/isUppercase.js @@ -1,18 +1,17 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isUppercase; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isUppercase(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); return str === str.toUpperCase(); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isVariableWidth.js b/lib/isVariableWidth.js index 5b1cf1549..c412a8f1c 100644 --- a/lib/isVariableWidth.js +++ b/lib/isVariableWidth.js @@ -1,22 +1,21 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isVariableWidth; -var _assertString = require('./util/assertString'); +var _assertString = _interopRequireDefault(require("./util/assertString")); -var _assertString2 = _interopRequireDefault(_assertString); +var _isFullWidth = require("./isFullWidth"); -var _isFullWidth = require('./isFullWidth'); - -var _isHalfWidth = require('./isHalfWidth'); +var _isHalfWidth = require("./isHalfWidth"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isVariableWidth(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); return _isFullWidth.fullWidth.test(str) && _isHalfWidth.halfWidth.test(str); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/isWhitelisted.js b/lib/isWhitelisted.js index 1a073561e..2ef9065d4 100644 --- a/lib/isWhitelisted.js +++ b/lib/isWhitelisted.js @@ -1,23 +1,24 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isWhitelisted; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isWhitelisted(str, chars) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); + for (var i = str.length - 1; i >= 0; i--) { if (chars.indexOf(str[i]) === -1) { return false; } } + return true; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/ltrim.js b/lib/ltrim.js index 58b2e3db4..eef529694 100644 --- a/lib/ltrim.js +++ b/lib/ltrim.js @@ -1,19 +1,18 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = ltrim; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function ltrim(str, chars) { - (0, _assertString2.default)(str); - var pattern = chars ? new RegExp('^[' + chars + ']+', 'g') : /^\s+/g; + (0, _assertString.default)(str); + var pattern = chars ? new RegExp("^[".concat(chars, "]+"), 'g') : /^\s+/g; return str.replace(pattern, ''); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/matches.js b/lib/matches.js index 43f788489..060208663 100644 --- a/lib/matches.js +++ b/lib/matches.js @@ -1,21 +1,22 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = matches; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function matches(str, pattern, modifiers) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); + if (Object.prototype.toString.call(pattern) !== '[object RegExp]') { pattern = new RegExp(pattern, modifiers); } + return pattern.test(str); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/normalizeEmail.js b/lib/normalizeEmail.js index e862af254..b4717b37a 100644 --- a/lib/normalizeEmail.js +++ b/lib/normalizeEmail.js @@ -1,13 +1,11 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = normalizeEmail; -var _merge = require('./util/merge'); - -var _merge2 = _interopRequireDefault(_merge); +var _merge = _interopRequireDefault(require("./util/merge")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -17,7 +15,6 @@ var default_normalize_email_options = { // Please note this may violate RFC 5321 as per http://stackoverflow.com/a/9808332/192024). // The domain is always lowercased, as per RFC 1035 all_lowercase: true, - // The following conversions are specific to GMail // Lowercases the local part of the GMail address (known to be case-insensitive) gmail_lowercase: true, @@ -27,63 +24,53 @@ var default_normalize_email_options = { gmail_remove_subaddress: true, // Conversts the googlemail.com domain to gmail.com gmail_convert_googlemaildotcom: true, - // The following conversions are specific to Outlook.com / Windows Live / Hotmail // Lowercases the local part of the Outlook.com address (known to be case-insensitive) outlookdotcom_lowercase: true, // Removes the subaddress (e.g. "+foo") from the email address outlookdotcom_remove_subaddress: true, - // The following conversions are specific to Yahoo // Lowercases the local part of the Yahoo address (known to be case-insensitive) yahoo_lowercase: true, // Removes the subaddress (e.g. "-foo") from the email address yahoo_remove_subaddress: true, - // The following conversions are specific to Yandex // Lowercases the local part of the Yandex address (known to be case-insensitive) yandex_lowercase: true, - // The following conversions are specific to iCloud // Lowercases the local part of the iCloud address (known to be case-insensitive) icloud_lowercase: true, // Removes the subaddress (e.g. "+foo") from the email address icloud_remove_subaddress: true -}; +}; // List of domains used by iCloud -// List of domains used by iCloud -var icloud_domains = ['icloud.com', 'me.com']; - -// List of domains used by Outlook.com and its predecessors +var icloud_domains = ['icloud.com', 'me.com']; // List of domains used by Outlook.com and its predecessors // This list is likely incomplete. // Partial reference: // https://blogs.office.com/2013/04/17/outlook-com-gets-two-step-verification-sign-in-by-alias-and-new-international-domains/ -var outlookdotcom_domains = ['hotmail.at', 'hotmail.be', 'hotmail.ca', 'hotmail.cl', 'hotmail.co.il', 'hotmail.co.nz', 'hotmail.co.th', 'hotmail.co.uk', 'hotmail.com', 'hotmail.com.ar', 'hotmail.com.au', 'hotmail.com.br', 'hotmail.com.gr', 'hotmail.com.mx', 'hotmail.com.pe', 'hotmail.com.tr', 'hotmail.com.vn', 'hotmail.cz', 'hotmail.de', 'hotmail.dk', 'hotmail.es', 'hotmail.fr', 'hotmail.hu', 'hotmail.id', 'hotmail.ie', 'hotmail.in', 'hotmail.it', 'hotmail.jp', 'hotmail.kr', 'hotmail.lv', 'hotmail.my', 'hotmail.ph', 'hotmail.pt', 'hotmail.sa', 'hotmail.sg', 'hotmail.sk', 'live.be', 'live.co.uk', 'live.com', 'live.com.ar', 'live.com.mx', 'live.de', 'live.es', 'live.eu', 'live.fr', 'live.it', 'live.nl', 'msn.com', 'outlook.at', 'outlook.be', 'outlook.cl', 'outlook.co.il', 'outlook.co.nz', 'outlook.co.th', 'outlook.com', 'outlook.com.ar', 'outlook.com.au', 'outlook.com.br', 'outlook.com.gr', 'outlook.com.pe', 'outlook.com.tr', 'outlook.com.vn', 'outlook.cz', 'outlook.de', 'outlook.dk', 'outlook.es', 'outlook.fr', 'outlook.hu', 'outlook.id', 'outlook.ie', 'outlook.in', 'outlook.it', 'outlook.jp', 'outlook.kr', 'outlook.lv', 'outlook.my', 'outlook.ph', 'outlook.pt', 'outlook.sa', 'outlook.sg', 'outlook.sk', 'passport.com']; -// List of domains used by Yahoo Mail +var outlookdotcom_domains = ['hotmail.at', 'hotmail.be', 'hotmail.ca', 'hotmail.cl', 'hotmail.co.il', 'hotmail.co.nz', 'hotmail.co.th', 'hotmail.co.uk', 'hotmail.com', 'hotmail.com.ar', 'hotmail.com.au', 'hotmail.com.br', 'hotmail.com.gr', 'hotmail.com.mx', 'hotmail.com.pe', 'hotmail.com.tr', 'hotmail.com.vn', 'hotmail.cz', 'hotmail.de', 'hotmail.dk', 'hotmail.es', 'hotmail.fr', 'hotmail.hu', 'hotmail.id', 'hotmail.ie', 'hotmail.in', 'hotmail.it', 'hotmail.jp', 'hotmail.kr', 'hotmail.lv', 'hotmail.my', 'hotmail.ph', 'hotmail.pt', 'hotmail.sa', 'hotmail.sg', 'hotmail.sk', 'live.be', 'live.co.uk', 'live.com', 'live.com.ar', 'live.com.mx', 'live.de', 'live.es', 'live.eu', 'live.fr', 'live.it', 'live.nl', 'msn.com', 'outlook.at', 'outlook.be', 'outlook.cl', 'outlook.co.il', 'outlook.co.nz', 'outlook.co.th', 'outlook.com', 'outlook.com.ar', 'outlook.com.au', 'outlook.com.br', 'outlook.com.gr', 'outlook.com.pe', 'outlook.com.tr', 'outlook.com.vn', 'outlook.cz', 'outlook.de', 'outlook.dk', 'outlook.es', 'outlook.fr', 'outlook.hu', 'outlook.id', 'outlook.ie', 'outlook.in', 'outlook.it', 'outlook.jp', 'outlook.kr', 'outlook.lv', 'outlook.my', 'outlook.ph', 'outlook.pt', 'outlook.sa', 'outlook.sg', 'outlook.sk', 'passport.com']; // List of domains used by Yahoo Mail // This list is likely incomplete -var yahoo_domains = ['rocketmail.com', 'yahoo.ca', 'yahoo.co.uk', 'yahoo.com', 'yahoo.de', 'yahoo.fr', 'yahoo.in', 'yahoo.it', 'ymail.com']; -// List of domains used by yandex.ru -var yandex_domains = ['yandex.ru', 'yandex.ua', 'yandex.kz', 'yandex.com', 'yandex.by', 'ya.ru']; +var yahoo_domains = ['rocketmail.com', 'yahoo.ca', 'yahoo.co.uk', 'yahoo.com', 'yahoo.de', 'yahoo.fr', 'yahoo.in', 'yahoo.it', 'ymail.com']; // List of domains used by yandex.ru + +var yandex_domains = ['yandex.ru', 'yandex.ua', 'yandex.kz', 'yandex.com', 'yandex.by', 'ya.ru']; // replace single dots, but not multiple consecutive dots -// replace single dots, but not multiple consecutive dots function dotsReplacer(match) { if (match.length > 1) { return match; } + return ''; } function normalizeEmail(email, options) { - options = (0, _merge2.default)(options, default_normalize_email_options); - + options = (0, _merge.default)(options, default_normalize_email_options); var raw_parts = email.split('@'); var domain = raw_parts.pop(); var user = raw_parts.join('@'); - var parts = [user, domain]; + var parts = [user, domain]; // The domain is always lowercased, as it's case-insensitive per RFC 1035 - // The domain is always lowercased, as it's case-insensitive per RFC 1035 parts[1] = parts[1].toLowerCase(); if (parts[1] === 'gmail.com' || parts[1] === 'googlemail.com') { @@ -91,25 +78,31 @@ function normalizeEmail(email, options) { if (options.gmail_remove_subaddress) { parts[0] = parts[0].split('+')[0]; } + if (options.gmail_remove_dots) { // this does not replace consecutive dots like example..email@gmail.com parts[0] = parts[0].replace(/\.+/g, dotsReplacer); } + if (!parts[0].length) { return false; } + if (options.all_lowercase || options.gmail_lowercase) { parts[0] = parts[0].toLowerCase(); } + parts[1] = options.gmail_convert_googlemaildotcom ? 'gmail.com' : parts[1]; } else if (icloud_domains.indexOf(parts[1]) >= 0) { // Address is iCloud if (options.icloud_remove_subaddress) { parts[0] = parts[0].split('+')[0]; } + if (!parts[0].length) { return false; } + if (options.all_lowercase || options.icloud_lowercase) { parts[0] = parts[0].toLowerCase(); } @@ -118,9 +111,11 @@ function normalizeEmail(email, options) { if (options.outlookdotcom_remove_subaddress) { parts[0] = parts[0].split('+')[0]; } + if (!parts[0].length) { return false; } + if (options.all_lowercase || options.outlookdotcom_lowercase) { parts[0] = parts[0].toLowerCase(); } @@ -130,9 +125,11 @@ function normalizeEmail(email, options) { var components = parts[0].split('-'); parts[0] = components.length > 1 ? components.slice(0, -1).join('-') : components[0]; } + if (!parts[0].length) { return false; } + if (options.all_lowercase || options.yahoo_lowercase) { parts[0] = parts[0].toLowerCase(); } @@ -140,11 +137,14 @@ function normalizeEmail(email, options) { if (options.all_lowercase || options.yandex_lowercase) { parts[0] = parts[0].toLowerCase(); } + parts[1] = 'yandex.ru'; // all yandex domains are equal, 1st preffered } else if (options.all_lowercase) { // Any other address parts[0] = parts[0].toLowerCase(); } + return parts.join('@'); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/rtrim.js b/lib/rtrim.js index a2e073d6f..ffea669cd 100644 --- a/lib/rtrim.js +++ b/lib/rtrim.js @@ -1,23 +1,24 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = rtrim; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function rtrim(str, chars) { - (0, _assertString2.default)(str); - var pattern = chars ? new RegExp('[' + chars + ']') : /\s/; - + (0, _assertString.default)(str); + var pattern = chars ? new RegExp("[".concat(chars, "]")) : /\s/; var idx = str.length - 1; - for (; idx >= 0 && pattern.test(str[idx]); idx--) {} + + for (; idx >= 0 && pattern.test(str[idx]); idx--) { + ; + } return idx < str.length ? str.substr(0, idx + 1) : str; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/stripLow.js b/lib/stripLow.js index bdf395fef..2f82949d1 100644 --- a/lib/stripLow.js +++ b/lib/stripLow.js @@ -1,23 +1,20 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = stripLow; -var _assertString = require('./util/assertString'); +var _assertString = _interopRequireDefault(require("./util/assertString")); -var _assertString2 = _interopRequireDefault(_assertString); - -var _blacklist = require('./blacklist'); - -var _blacklist2 = _interopRequireDefault(_blacklist); +var _blacklist = _interopRequireDefault(require("./blacklist")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function stripLow(str, keep_new_lines) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); var chars = keep_new_lines ? '\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F' : '\\x00-\\x1F\\x7F'; - return (0, _blacklist2.default)(str, chars); + return (0, _blacklist.default)(str, chars); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/toBoolean.js b/lib/toBoolean.js index 8ac35e358..206584e48 100644 --- a/lib/toBoolean.js +++ b/lib/toBoolean.js @@ -1,21 +1,22 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = toBoolean; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function toBoolean(str, strict) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); + if (strict) { return str === '1' || str === 'true'; } + return str !== '0' && str !== 'false' && str !== ''; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/toDate.js b/lib/toDate.js index 80e21f386..61e80a19e 100644 --- a/lib/toDate.js +++ b/lib/toDate.js @@ -1,19 +1,18 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = toDate; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function toDate(date) { - (0, _assertString2.default)(date); + (0, _assertString.default)(date); date = Date.parse(date); return !isNaN(date) ? new Date(date) : null; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/toFloat.js b/lib/toFloat.js index 3a8e256bb..7974dcdd9 100644 --- a/lib/toFloat.js +++ b/lib/toFloat.js @@ -1,18 +1,17 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = toFloat; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function toFloat(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); return parseFloat(str); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/toInt.js b/lib/toInt.js index 97862a41f..40fc5ef09 100644 --- a/lib/toInt.js +++ b/lib/toInt.js @@ -1,18 +1,17 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = toInt; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function toInt(str, radix) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); return parseInt(str, radix || 10); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/trim.js b/lib/trim.js index cb945d450..af459d063 100644 --- a/lib/trim.js +++ b/lib/trim.js @@ -1,21 +1,18 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = trim; -var _rtrim = require('./rtrim'); +var _rtrim = _interopRequireDefault(require("./rtrim")); -var _rtrim2 = _interopRequireDefault(_rtrim); - -var _ltrim = require('./ltrim'); - -var _ltrim2 = _interopRequireDefault(_ltrim); +var _ltrim = _interopRequireDefault(require("./ltrim")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function trim(str, chars) { - return (0, _rtrim2.default)((0, _ltrim2.default)(str, chars), chars); + return (0, _rtrim.default)((0, _ltrim.default)(str, chars), chars); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/unescape.js b/lib/unescape.js index cdcd7c96c..6ac73822f 100644 --- a/lib/unescape.js +++ b/lib/unescape.js @@ -1,18 +1,17 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = unescape; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function unescape(str) { - (0, _assertString2.default)(str); + (0, _assertString.default)(str); return str.replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, "'").replace(/</g, '<').replace(/>/g, '>').replace(///g, '/').replace(/\/g, '\\').replace(/`/g, '`'); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/util/assertString.js b/lib/util/assertString.js index 3f071ccd5..19bb844e7 100644 --- a/lib/util/assertString.js +++ b/lib/util/assertString.js @@ -1,28 +1,32 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = assertString; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } -exports.default = assertString; function assertString(input) { var isString = typeof input === 'string' || input instanceof String; if (!isString) { - var invalidType = void 0; + var invalidType; + if (input === null) { invalidType = 'null'; } else { - invalidType = typeof input === 'undefined' ? 'undefined' : _typeof(input); + invalidType = _typeof(input); + if (invalidType === 'object' && input.constructor && input.constructor.hasOwnProperty('name')) { invalidType = input.constructor.name; } else { - invalidType = 'a ' + invalidType; + invalidType = "a ".concat(invalidType); } } - throw new TypeError('Expected string but received ' + invalidType + '.'); + + throw new TypeError("Expected string but received ".concat(invalidType, ".")); } } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/util/includes.js b/lib/util/includes.js index 5dd2e9c4a..292ff4d77 100644 --- a/lib/util/includes.js +++ b/lib/util/includes.js @@ -3,11 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; + var includes = function includes(arr, val) { return arr.some(function (arrVal) { return val === arrVal; }); }; -exports.default = includes; -module.exports = exports["default"]; \ No newline at end of file +var _default = includes; +exports.default = _default; +module.exports = exports.default; \ No newline at end of file diff --git a/lib/util/merge.js b/lib/util/merge.js index 68d66fbb8..f30aebdd2 100644 --- a/lib/util/merge.js +++ b/lib/util/merge.js @@ -1,18 +1,21 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = merge; + function merge() { var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var defaults = arguments[1]; + var defaults = arguments.length > 1 ? arguments[1] : undefined; for (var key in defaults) { if (typeof obj[key] === 'undefined') { obj[key] = defaults[key]; } } + return obj; } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/util/toString.js b/lib/util/toString.js index e5d5c0db1..e367fadcb 100644 --- a/lib/util/toString.js +++ b/lib/util/toString.js @@ -1,14 +1,14 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = toString; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } -exports.default = toString; function toString(input) { - if ((typeof input === 'undefined' ? 'undefined' : _typeof(input)) === 'object' && input !== null) { + if (_typeof(input) === 'object' && input !== null) { if (typeof input.toString === 'function') { input = input.toString(); } else { @@ -17,6 +17,8 @@ function toString(input) { } else if (input === null || typeof input === 'undefined' || isNaN(input) && !input.length) { input = ''; } + return String(input); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/lib/whitelist.js b/lib/whitelist.js index 7a06c5d88..9769e57cd 100644 --- a/lib/whitelist.js +++ b/lib/whitelist.js @@ -1,18 +1,17 @@ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = whitelist; -var _assertString = require('./util/assertString'); - -var _assertString2 = _interopRequireDefault(_assertString); +var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function whitelist(str, chars) { - (0, _assertString2.default)(str); - return str.replace(new RegExp('[^' + chars + ']+', 'g'), ''); + (0, _assertString.default)(str); + return str.replace(new RegExp("[^".concat(chars, "]+"), 'g'), ''); } -module.exports = exports['default']; \ No newline at end of file + +module.exports = exports.default; \ No newline at end of file diff --git a/validator.js b/validator.js index 7d1f9c59a..039b0f0d0 100644 --- a/validator.js +++ b/validator.js @@ -26,28 +26,205 @@ (global.validator = factory()); }(this, (function () { 'use strict'; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { - return typeof obj; -} : function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; -}; +function _typeof(obj) { + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function (obj) { + return typeof obj; + }; + } else { + _typeof = function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(obj); +} + +function _toArray(arr) { + return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest(); +} + +function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; +} + +function _iterableToArray(iter) { + if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); +} + +function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance"); +} + +function _addElementPlacement(element, placements, silent) { + var keys = placements[element.placement]; + + if (!silent && keys.indexOf(element.key) !== -1) { + throw new TypeError("Duplicated element (" + element.key + ")"); + } + + keys.push(element.key); +} + +function _fromElementDescriptor(element) { + var obj = { + kind: element.kind, + key: element.key, + placement: element.placement, + descriptor: element.descriptor + }; + var desc = { + value: "Descriptor", + configurable: true + }; + Object.defineProperty(obj, Symbol.toStringTag, desc); + if (element.kind === "field") obj.initializer = element.initializer; + return obj; +} + +function _toElementDescriptors(elementObjects) { + if (elementObjects === undefined) return; + return _toArray(elementObjects).map(function (elementObject) { + var element = _toElementDescriptor(elementObject); + + _disallowProperty(elementObject, "finisher", "An element descriptor"); + + _disallowProperty(elementObject, "extras", "An element descriptor"); + + return element; + }); +} + +function _toElementDescriptor(elementObject) { + var kind = String(elementObject.kind); + + if (kind !== "method" && kind !== "field") { + throw new TypeError('An element descriptor\'s .kind property must be either "method" or' + ' "field", but a decorator created an element descriptor with' + ' .kind "' + kind + '"'); + } + + var key = elementObject.key; + if (typeof key !== "string" && typeof key !== "symbol") key = String(key); + var placement = String(elementObject.placement); + + if (placement !== "static" && placement !== "prototype" && placement !== "own") { + throw new TypeError('An element descriptor\'s .placement property must be one of "static",' + ' "prototype" or "own", but a decorator created an element descriptor' + ' with .placement "' + placement + '"'); + } + + var descriptor = elementObject.descriptor; + + _disallowProperty(elementObject, "elements", "An element descriptor"); + + var element = { + kind: kind, + key: key, + placement: placement, + descriptor: Object.assign({}, descriptor) + }; + + if (kind !== "field") { + _disallowProperty(elementObject, "initializer", "A method descriptor"); + } else { + _disallowProperty(descriptor, "get", "The property descriptor of a field descriptor"); + + _disallowProperty(descriptor, "set", "The property descriptor of a field descriptor"); + + _disallowProperty(descriptor, "value", "The property descriptor of a field descriptor"); + + element.initializer = elementObject.initializer; + } + + return element; +} + +function _toElementFinisherExtras(elementObject) { + var element = _toElementDescriptor(elementObject); + + var finisher = _optionalCallableProperty(elementObject, "finisher"); + + var extras = _toElementDescriptors(elementObject.extras); + + return { + element: element, + finisher: finisher, + extras: extras + }; +} + +function _fromClassDescriptor(elements) { + var obj = { + kind: "class", + elements: elements.map(_fromElementDescriptor) + }; + var desc = { + value: "Descriptor", + configurable: true + }; + Object.defineProperty(obj, Symbol.toStringTag, desc); + return obj; +} + +function _toClassDescriptor(obj) { + var kind = String(obj.kind); + + if (kind !== "class") { + throw new TypeError('A class descriptor\'s .kind property must be "class", but a decorator' + ' created a class descriptor with .kind "' + kind + '"'); + } + + _disallowProperty(obj, "key", "A class descriptor"); + + _disallowProperty(obj, "placement", "A class descriptor"); + + _disallowProperty(obj, "descriptor", "A class descriptor"); + + _disallowProperty(obj, "initializer", "A class descriptor"); + + _disallowProperty(obj, "extras", "A class descriptor"); + + var finisher = _optionalCallableProperty(obj, "finisher"); + + var elements = _toElementDescriptors(obj.elements); + + return { + elements: elements, + finisher: finisher + }; +} + +function _disallowProperty(obj, name, objectType) { + if (obj[name] !== undefined) { + throw new TypeError(objectType + " can't have a ." + name + " property."); + } +} + +function _optionalCallableProperty(obj, name) { + var value = obj[name]; + + if (value !== undefined && typeof value !== "function") { + throw new TypeError("Expected '" + name + "' to be a function"); + } + + return value; +} function assertString(input) { var isString = typeof input === 'string' || input instanceof String; if (!isString) { - var invalidType = void 0; + var invalidType; + if (input === null) { invalidType = 'null'; } else { - invalidType = typeof input === 'undefined' ? 'undefined' : _typeof(input); + invalidType = _typeof(input); + if (invalidType === 'object' && input.constructor && input.constructor.hasOwnProperty('name')) { invalidType = input.constructor.name; } else { - invalidType = 'a ' + invalidType; + invalidType = "a ".concat(invalidType); } } - throw new TypeError('Expected string but received ' + invalidType + '.'); + + throw new TypeError("Expected string but received ".concat(invalidType, ".")); } } @@ -69,9 +246,11 @@ function toInt(str, radix) { function toBoolean(str, strict) { assertString(str); + if (strict) { return str === '1' || str === 'true'; } + return str !== '0' && str !== 'false' && str !== ''; } @@ -81,7 +260,7 @@ function equals(str, comparison) { } function toString(input) { - if ((typeof input === 'undefined' ? 'undefined' : _typeof(input)) === 'object' && input !== null) { + if (_typeof(input) === 'object' && input !== null) { if (typeof input.toString === 'function') { input = input.toString(); } else { @@ -90,6 +269,7 @@ function toString(input) { } else if (input === null || typeof input === 'undefined' || isNaN(input) && !input.length) { input = ''; } + return String(input); } @@ -100,30 +280,35 @@ function contains(str, elem) { function matches(str, pattern, modifiers) { assertString(str); + if (Object.prototype.toString.call(pattern) !== '[object RegExp]') { pattern = new RegExp(pattern, modifiers); } + return pattern.test(str); } function merge() { var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var defaults = arguments[1]; + var defaults = arguments.length > 1 ? arguments[1] : undefined; for (var key in defaults) { if (typeof obj[key] === 'undefined') { obj[key] = defaults[key]; } } + return obj; } /* eslint-disable prefer-rest-params */ + function isByteLength(str, options) { assertString(str); - var min = void 0; - var max = void 0; - if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') { + var min; + var max; + + if (_typeof(options) === 'object') { min = options.min || 0; max = options.max; } else { @@ -131,6 +316,7 @@ function isByteLength(str, options) { min = arguments[1]; max = arguments[2]; } + var len = encodeURI(str).split(/%..|./).length - 1; return len >= min && (typeof max === 'undefined' || len <= max); } @@ -140,64 +326,74 @@ var default_fqdn_options = { allow_underscores: false, allow_trailing_dot: false }; - function isFQDN(str, options) { assertString(str); options = merge(options, default_fqdn_options); - /* Remove the optional trailing dot before checking validity */ + if (options.allow_trailing_dot && str[str.length - 1] === '.') { str = str.substring(0, str.length - 1); } + var parts = str.split('.'); + for (var i = 0; i < parts.length; i++) { if (parts[i].length > 63) { return false; } } + if (options.require_tld) { var tld = parts.pop(); + if (!parts.length || !/^([a-z\u00a1-\uffff]{2,}|xn[a-z0-9-]{2,})$/i.test(tld)) { return false; - } - // disallow spaces + } // disallow spaces + + if (/[\s\u2002-\u200B\u202F\u205F\u3000\uFEFF\uDB40\uDC20]/.test(tld)) { return false; } } + for (var part, _i = 0; _i < parts.length; _i++) { part = parts[_i]; + if (options.allow_underscores) { part = part.replace(/_/g, ''); } + if (!/^[a-z\u00a1-\uffff0-9-]+$/i.test(part)) { return false; - } - // disallow full-width chars + } // disallow full-width chars + + if (/[\uff01-\uff5e]/.test(part)) { return false; } + if (part[0] === '-' || part[part.length - 1] === '-') { return false; } } + return true; } var ipv4Maybe = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/; var ipv6Block = /^[0-9A-F]{1,4}$/i; - function isIP(str) { var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; - assertString(str); version = String(version); + if (!version) { return isIP(str, 4) || isIP(str, 6); } else if (version === '4') { if (!ipv4Maybe.test(str)) { return false; } + var parts = str.split('.').sort(function (a, b) { return a - b; }); @@ -205,18 +401,19 @@ function isIP(str) { } else if (version === '6') { var blocks = str.split(':'); var foundOmissionBlock = false; // marker to indicate :: - // At least some OS accept the last 32 bits of an IPv6 address // (i.e. 2 of the blocks) in IPv4 notation, and RFC 3493 says // that '::ffff:a.b.c.d' is valid for IPv4-mapped IPv6 addresses, // and '::a.b.c.d' is deprecated, but also valid. + var foundIPv4TransitionBlock = isIP(blocks[blocks.length - 1], 4); var expectedNumberOfBlocks = foundIPv4TransitionBlock ? 7 : 8; if (blocks.length > expectedNumberOfBlocks) { return false; - } - // initial or final :: + } // initial or final :: + + if (str === '::') { return true; } else if (str.substr(0, 2) === '::') { @@ -236,19 +433,22 @@ function isIP(str) { if (foundOmissionBlock) { return false; // multiple :: in address } + foundOmissionBlock = true; - } else if (foundIPv4TransitionBlock && i === blocks.length - 1) { - // it has been checked before that the last + } else if (foundIPv4TransitionBlock && i === blocks.length - 1) {// it has been checked before that the last // block is a valid IPv4 address } else if (!ipv6Block.test(blocks[i])) { return false; } } + if (foundOmissionBlock) { return blocks.length >= 1; } + return blocks.length === expectedNumberOfBlocks; } + return false; } @@ -258,9 +458,10 @@ var default_email_options = { allow_utf8_local_part: true, require_tld: true }; - /* eslint-disable max-len */ + /* eslint-disable no-control-regex */ + var displayName = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\,\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\s]*<(.+)>$/i; var emailUserPart = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i; var gmailUserPart = /^[a-z\d]+$/; @@ -268,6 +469,7 @@ var quotedEmailUser = /^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e var emailUserUtf8Part = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$/i; var quotedEmailUserUtf8 = /^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*$/i; /* eslint-enable max-len */ + /* eslint-enable no-control-regex */ function isEmail(str, options) { @@ -276,6 +478,7 @@ function isEmail(str, options) { if (options.require_display_name || options.allow_display_name) { var display_email = str.match(displayName); + if (display_email) { str = display_email[1]; } else if (options.require_display_name) { @@ -286,7 +489,6 @@ function isEmail(str, options) { var parts = str.split('@'); var domain = parts.pop(); var user = parts.join('@'); - var lower_domain = domain.toLowerCase(); if (options.domain_specific_validation && (lower_domain === 'gmail.com' || lower_domain === 'googlemail.com')) { @@ -297,17 +499,19 @@ function isEmail(str, options) { Gmail only normalizes single dots, removing them from here is pointless, should be done in normalizeEmail */ - user = user.toLowerCase(); + user = user.toLowerCase(); // Removing sub-address from username before gmail validation - // Removing sub-address from username before gmail validation - var username = user.split('+')[0]; + var username = user.split('+')[0]; // Dots are not included in gmail length restriction - // Dots are not included in gmail length restriction - if (!isByteLength(username.replace('.', ''), { min: 6, max: 30 })) { + if (!isByteLength(username.replace('.', ''), { + min: 6, + max: 30 + })) { return false; } var _user_parts = username.split('.'); + for (var i = 0; i < _user_parts.length; i++) { if (!gmailUserPart.test(_user_parts[i])) { return false; @@ -315,11 +519,17 @@ function isEmail(str, options) { } } - if (!isByteLength(user, { max: 64 }) || !isByteLength(domain, { max: 254 })) { + if (!isByteLength(user, { + max: 64 + }) || !isByteLength(domain, { + max: 254 + })) { return false; } - if (!isFQDN(domain, { require_tld: options.require_tld })) { + if (!isFQDN(domain, { + require_tld: options.require_tld + })) { if (!options.allow_ip_domain) { return false; } @@ -343,8 +553,8 @@ function isEmail(str, options) { } var pattern = options.allow_utf8_local_part ? emailUserUtf8Part : emailUserPart; - var user_parts = user.split('.'); + for (var _i = 0; _i < user_parts.length; _i++) { if (!pattern.test(user_parts[_i])) { return false; @@ -364,7 +574,6 @@ var default_url_options = { allow_trailing_dot: false, allow_protocol_relative_urls: false }; - var wrapped_ipv6 = /^\[([^\]]+)\](?::([0-9]+))?$/; function isRegExp(obj) { @@ -374,40 +583,37 @@ function isRegExp(obj) { function checkHost(host, matches) { for (var i = 0; i < matches.length; i++) { var match = matches[i]; + if (host === match || isRegExp(match) && match.test(host)) { return true; } } + return false; } function isURL(url, options) { assertString(url); + if (!url || url.length >= 2083 || /[\s<>]/.test(url)) { return false; } + if (url.indexOf('mailto:') === 0) { return false; } - options = merge(options, default_url_options); - var protocol = void 0, - auth = void 0, - host = void 0, - hostname = void 0, - port = void 0, - port_str = void 0, - split = void 0, - ipv6 = void 0; + options = merge(options, default_url_options); + var protocol, auth, host, hostname, port, port_str, split, ipv6; split = url.split('#'); url = split.shift(); - split = url.split('?'); url = split.shift(); - split = url.split('://'); + if (split.length > 1) { protocol = split.shift().toLowerCase(); + if (options.require_valid_protocol && options.protocols.indexOf(protocol) === -1) { return false; } @@ -417,8 +623,10 @@ function isURL(url, options) { if (!options.allow_protocol_relative_urls) { return false; } + split[0] = url.substr(2); } + url = split.join('://'); if (url === '') { @@ -433,20 +641,24 @@ function isURL(url, options) { } split = url.split('@'); + if (split.length > 1) { if (options.disallow_auth) { return false; } + auth = split.shift(); + if (auth.indexOf(':') >= 0 && auth.split(':').length > 2) { return false; } } - hostname = split.join('@'); + hostname = split.join('@'); port_str = null; ipv6 = null; var ipv6_match = hostname.match(wrapped_ipv6); + if (ipv6_match) { host = ''; ipv6 = ipv6_match[1]; @@ -454,6 +666,7 @@ function isURL(url, options) { } else { split = hostname.split(':'); host = split.shift(); + if (split.length) { port_str = split.join(':'); } @@ -461,6 +674,7 @@ function isURL(url, options) { if (port_str !== null) { port = parseInt(port_str, 10); + if (!/^[0-9]+$/.test(port_str) || port <= 0 || port > 65535) { return false; } @@ -475,6 +689,7 @@ function isURL(url, options) { if (options.host_whitelist && !checkHost(host, options.host_whitelist)) { return false; } + if (options.host_blacklist && checkHost(host, options.host_blacklist)) { return false; } @@ -484,31 +699,30 @@ function isURL(url, options) { var macAddress = /^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$/; var macAddressNoColons = /^([0-9a-fA-F]){12}$/; - function isMACAddress(str, options) { assertString(str); + if (options && options.no_colons) { return macAddressNoColons.test(str); } + return macAddress.test(str); } var subnetMaybe = /^\d{1,2}$/; - function isIPRange(str) { assertString(str); - var parts = str.split('/'); + var parts = str.split('/'); // parts[0] -> ip, parts[1] -> subnet - // parts[0] -> ip, parts[1] -> subnet if (parts.length !== 2) { return false; } if (!subnetMaybe.test(parts[1])) { return false; - } + } // Disallow preceding 0 i.e. 01, 02, ... + - // Disallow preceding 0 i.e. 01, 02, ... if (parts[1].length > 1 && parts[1].startsWith('0')) { return false; } @@ -548,7 +762,6 @@ var alpha = { 'ku-IQ': /^[ئابپتجچحخدرڕزژسشعغفڤقکگلڵمنوۆھەیێيطؤثآإأكضصةظذ]+$/i, ar: /^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/ }; - var alphanumeric = { 'en-US': /^[0-9A-Z]+$/i, 'bg-BG': /^[0-9А-Я]+$/i, @@ -576,32 +789,30 @@ var alphanumeric = { 'ku-IQ': /^[٠١٢٣٤٥٦٧٨٩0-9ئابپتجچحخدرڕزژسشعغفڤقکگلڵمنوۆھەیێيطؤثآإأكضصةظذ]+$/i, ar: /^[٠١٢٣٤٥٦٧٨٩0-9ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/ }; - var decimal = { 'en-US': '.', ar: '٫' }; - var englishLocales = ['AU', 'GB', 'HK', 'IN', 'NZ', 'ZA', 'ZM']; for (var locale, i = 0; i < englishLocales.length; i++) { - locale = 'en-' + englishLocales[i]; + locale = "en-".concat(englishLocales[i]); alpha[locale] = alpha['en-US']; alphanumeric[locale] = alphanumeric['en-US']; decimal[locale] = decimal['en-US']; -} +} // Source: http://www.localeplanet.com/java/ + -// Source: http://www.localeplanet.com/java/ var arabicLocales = ['AE', 'BH', 'DZ', 'EG', 'IQ', 'JO', 'KW', 'LB', 'LY', 'MA', 'QM', 'QA', 'SA', 'SD', 'SY', 'TN', 'YE']; for (var _locale, _i = 0; _i < arabicLocales.length; _i++) { - _locale = 'ar-' + arabicLocales[_i]; + _locale = "ar-".concat(arabicLocales[_i]); alpha[_locale] = alpha.ar; alphanumeric[_locale] = alphanumeric.ar; decimal[_locale] = decimal.ar; -} +} // Source: https://en.wikipedia.org/wiki/Decimal_mark + -// Source: https://en.wikipedia.org/wiki/Decimal_mark var dotDecimal = []; var commaDecimal = ['bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'es-ES', 'fr-FR', 'it-IT', 'ku-IQ', 'hu-HU', 'nb-NO', 'nn-NO', 'nl-NL', 'pl-PL', 'pt-PT', 'ru-RU', 'sl-SI', 'sr-RS@latin', 'sr-RS', 'sv-SE', 'tr-TR', 'uk-UA']; @@ -615,70 +826,69 @@ for (var _i3 = 0; _i3 < commaDecimal.length; _i3++) { alpha['pt-BR'] = alpha['pt-PT']; alphanumeric['pt-BR'] = alphanumeric['pt-PT']; -decimal['pt-BR'] = decimal['pt-PT']; +decimal['pt-BR'] = decimal['pt-PT']; // see #862 -// see #862 alpha['pl-Pl'] = alpha['pl-PL']; alphanumeric['pl-Pl'] = alphanumeric['pl-PL']; decimal['pl-Pl'] = decimal['pl-PL']; function isAlpha(str) { var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-US'; - assertString(str); + if (locale in alpha) { return alpha[locale].test(str); } - throw new Error('Invalid locale \'' + locale + '\''); -} + throw new Error("Invalid locale '".concat(locale, "'")); +} var locales = Object.keys(alpha); function isAlphanumeric(str) { var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-US'; - assertString(str); + if (locale in alphanumeric) { return alphanumeric[locale].test(str); } - throw new Error('Invalid locale \'' + locale + '\''); -} + throw new Error("Invalid locale '".concat(locale, "'")); +} var locales$1 = Object.keys(alphanumeric); var numeric = /^[+-]?([0-9]*[.])?[0-9]+$/; var numericNoSymbols = /^[0-9]+$/; - function isNumeric(str, options) { assertString(str); + if (options && options.no_symbols) { return numericNoSymbols.test(str); } + return numeric.test(str); } var int = /^(?:[-+]?(?:0|[1-9][0-9]*))$/; var intLeadingZeroes = /^[-+]?[0-9]+$/; - function isInt(str, options) { assertString(str); - options = options || {}; - - // Get the regex to use for testing, based on whether + options = options || {}; // Get the regex to use for testing, based on whether // leading zeroes are allowed or not. - var regex = options.hasOwnProperty('allow_leading_zeroes') && !options.allow_leading_zeroes ? int : intLeadingZeroes; - // Check min/max/lt/gt + var regex = options.hasOwnProperty('allow_leading_zeroes') && !options.allow_leading_zeroes ? int : intLeadingZeroes; // Check min/max/lt/gt + var minCheckPassed = !options.hasOwnProperty('min') || str >= options.min; var maxCheckPassed = !options.hasOwnProperty('max') || str <= options.max; var ltCheckPassed = !options.hasOwnProperty('lt') || str < options.lt; var gtCheckPassed = !options.hasOwnProperty('gt') || str > options.gt; - return regex.test(str) && minCheckPassed && maxCheckPassed && ltCheckPassed && gtCheckPassed; } function isPort(str) { - return isInt(str, { min: 0, max: 65535 }); + return isInt(str, { + min: 0, + max: 65535 + }); } function isLowercase(str) { @@ -692,6 +902,7 @@ function isUppercase(str) { } /* eslint-disable no-control-regex */ + var ascii = /^[\x00-\x7F]+$/; /* eslint-enable no-control-regex */ @@ -701,14 +912,12 @@ function isAscii(str) { } var fullWidth = /[^\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/; - function isFullWidth(str) { assertString(str); return fullWidth.test(str); } var halfWidth = /[\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/; - function isHalfWidth(str) { assertString(str); return halfWidth.test(str); @@ -720,6 +929,7 @@ function isVariableWidth(str) { } /* eslint-disable no-control-regex */ + var multibyte = /[^\x00-\x7F]/; /* eslint-enable no-control-regex */ @@ -729,7 +939,6 @@ function isMultibyte(str) { } var surrogatePair = /[\uD800-\uDBFF][\uDC00-\uDFFF]/; - function isSurrogatePair(str) { assertString(str); return surrogatePair.test(str); @@ -738,14 +947,15 @@ function isSurrogatePair(str) { function isFloat(str, options) { assertString(str); options = options || {}; - var float = new RegExp('^(?:[-+])?(?:[0-9]+)?(?:\\' + (options.locale ? decimal[options.locale] : '.') + '[0-9]*)?(?:[eE][\\+\\-]?(?:[0-9]+))?$'); + var float = new RegExp("^(?:[-+])?(?:[0-9]+)?(?:\\".concat(options.locale ? decimal[options.locale] : '.', "[0-9]*)?(?:[eE][\\+\\-]?(?:[0-9]+))?$")); + if (str === '' || str === '.' || str === '-' || str === '+') { return false; } + var value = parseFloat(str.replace(',', '.')); return float.test(str) && (!options.hasOwnProperty('min') || value >= options.min) && (!options.hasOwnProperty('max') || value <= options.max) && (!options.hasOwnProperty('lt') || value < options.lt) && (!options.hasOwnProperty('gt') || value > options.gt); } - var locales$2 = Object.keys(decimal); var includes = function includes(arr, val) { @@ -755,7 +965,7 @@ var includes = function includes(arr, val) { }; function decimalRegExp(options) { - var regExp = new RegExp('^[-+]?([0-9]+)?(\\' + decimal[options.locale] + '[0-9]{' + options.decimal_digits + '})' + (options.force_decimal ? '' : '?') + '$'); + var regExp = new RegExp("^[-+]?([0-9]+)?(\\".concat(decimal[options.locale], "[0-9]{").concat(options.decimal_digits, "})").concat(options.force_decimal ? '' : '?', "$")); return regExp; } @@ -764,20 +974,19 @@ var default_decimal_options = { decimal_digits: '1,', locale: 'en-US' }; - var blacklist = ['', '-', '+']; - function isDecimal(str, options) { assertString(str); options = merge(options, default_decimal_options); + if (options.locale in decimal) { return !includes(blacklist, str.replace(/ /g, '')) && decimalRegExp(options).test(str); } - throw new Error('Invalid locale \'' + options.locale + '\''); + + throw new Error("Invalid locale '".concat(options.locale, "'")); } var hexadecimal = /^[0-9A-F]+$/i; - function isHexadecimal(str) { assertString(str); return hexadecimal.test(str); @@ -789,22 +998,18 @@ function isDivisibleBy(str, num) { } var hexcolor = /^#?([0-9A-F]{3}|[0-9A-F]{6})$/i; - function isHexColor(str) { assertString(str); return hexcolor.test(str); } -// see http://isrc.ifpi.org/en/isrc-standard/code-syntax var isrc = /^[A-Z]{2}[0-9A-Z]{3}\d{2}\d{5}$/; - function isISRC(str) { assertString(str); return isrc.test(str); } var md5 = /^[a-f0-9]{32}$/; - function isMD5(str) { assertString(str); return md5.test(str); @@ -825,15 +1030,13 @@ var lengths = { crc32: 8, crc32b: 8 }; - function isHash(str, algorithm) { assertString(str); - var hash = new RegExp('^[a-f0-9]{' + lengths[algorithm] + '}$'); + var hash = new RegExp("^[a-f0-9]{".concat(lengths[algorithm], "}$")); return hash.test(str); } var jwt = /^([A-Za-z0-9\-_~+\/]+[=]{0,2})\.([A-Za-z0-9\-_~+\/]+[=]{0,2})(?:\.([A-Za-z0-9\-_~+\/]+[=]{0,2}))?$/; - function isJWT(str) { assertString(str); return jwt.test(str); @@ -841,30 +1044,34 @@ function isJWT(str) { function isJSON(str) { assertString(str); + try { var obj = JSON.parse(str); - return !!obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object'; - } catch (e) {/* ignore */} + return !!obj && _typeof(obj) === 'object'; + } catch (e) { + /* ignore */ + } + return false; } var default_is_empty_options = { ignore_whitespace: false }; - function isEmpty(str, options) { assertString(str); options = merge(options, default_is_empty_options); - return (options.ignore_whitespace ? str.trim().length : str.length) === 0; } /* eslint-disable prefer-rest-params */ + function isLength(str, options) { assertString(str); - var min = void 0; - var max = void 0; - if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') { + var min; + var max; + + if (_typeof(options) === 'object') { min = options.min || 0; max = options.max; } else { @@ -872,6 +1079,7 @@ function isLength(str, options) { min = arguments[1]; max = arguments[2]; } + var surrogatePairs = str.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g) || []; var len = str.length - surrogatePairs.length; return len >= min && (typeof max === 'undefined' || len <= max); @@ -883,10 +1091,8 @@ var uuid = { 5: /^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i, all: /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i }; - function isUUID(str) { var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'all'; - assertString(str); var pattern = uuid[version]; return pattern && pattern.test(str); @@ -899,7 +1105,6 @@ function isMongoId(str) { function isAfter(str) { var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : String(new Date()); - assertString(str); var comparison = toDate(date); var original = toDate(str); @@ -908,7 +1113,6 @@ function isAfter(str) { function isBefore(str) { var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : String(new Date()); - assertString(str); var comparison = toDate(date); var original = toDate(str); @@ -917,42 +1121,52 @@ function isBefore(str) { function isIn(str, options) { assertString(str); - var i = void 0; + var i; + if (Object.prototype.toString.call(options) === '[object Array]') { var array = []; + for (i in options) { if ({}.hasOwnProperty.call(options, i)) { array[i] = toString(options[i]); } } + return array.indexOf(str) >= 0; - } else if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') { + } else if (_typeof(options) === 'object') { return options.hasOwnProperty(str); } else if (options && typeof options.indexOf === 'function') { return options.indexOf(str) >= 0; } + return false; } /* eslint-disable max-len */ + var creditCard = /^(?:4[0-9]{12}(?:[0-9]{3})?|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}|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})$/; /* eslint-enable max-len */ function isCreditCard(str) { assertString(str); var sanitized = str.replace(/[- ]+/g, ''); + if (!creditCard.test(sanitized)) { return false; } + var sum = 0; - var digit = void 0; - var tmpNum = void 0; - var shouldDouble = void 0; + var digit; + var tmpNum; + var shouldDouble; + for (var i = sanitized.length - 1; i >= 0; i--) { digit = sanitized.substring(i, i + 1); tmpNum = parseInt(digit, 10); + if (shouldDouble) { tmpNum *= 2; + if (tmpNum >= 10) { sum += tmpNum % 10 + 1; } else { @@ -961,66 +1175,64 @@ function isCreditCard(str) { } else { sum += tmpNum; } + shouldDouble = !shouldDouble; } + return !!(sum % 10 === 0 ? sanitized : false); } var validators = { ES: function ES(str) { assertString(str); - var DNI = /^[0-9X-Z][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/; - var charsValue = { X: 0, Y: 1, Z: 2 }; + var controlDigits = ['T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E']; // sanitize user input - var controlDigits = ['T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E']; + var sanitized = str.trim().toUpperCase(); // validate the data structure - // sanitize user input - var sanitized = str.trim().toUpperCase(); - - // validate the data structure if (!DNI.test(sanitized)) { return false; - } + } // validate the control digit + - // validate the control digit var number = sanitized.slice(0, -1).replace(/[X,Y,Z]/g, function (char) { return charsValue[char]; }); - return sanitized.endsWith(controlDigits[number % 23]); } }; - function isIdentityCard(str) { var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'any'; - assertString(str); + if (locale in validators) { return validators[locale](str); } else if (locale === 'any') { for (var key in validators) { if (validators.hasOwnProperty(key)) { var validator = validators[key]; + if (validator(str)) { return true; } } } + return false; } - throw new Error('Invalid locale \'' + locale + '\''); + + throw new Error("Invalid locale '".concat(locale, "'")); } var isin = /^[A-Z]{2}[0-9A-Z]{9}[0-9]$/; - function isISIN(str) { assertString(str); + if (!isin.test(str)) { return false; } @@ -1028,16 +1240,18 @@ function isISIN(str) { var checksumStr = str.replace(/[A-Z]/g, function (character) { return parseInt(character, 36); }); - var sum = 0; - var digit = void 0; - var tmpNum = void 0; + var digit; + var tmpNum; var shouldDouble = true; + for (var i = checksumStr.length - 2; i >= 0; i--) { digit = checksumStr.substring(i, i + 1); tmpNum = parseInt(digit, 10); + if (shouldDouble) { tmpNum *= 2; + if (tmpNum >= 10) { sum += tmpNum + 1; } else { @@ -1046,6 +1260,7 @@ function isISIN(str) { } else { sum += tmpNum; } + shouldDouble = !shouldDouble; } @@ -1055,30 +1270,34 @@ function isISIN(str) { var isbn10Maybe = /^(?:[0-9]{9}X|[0-9]{10})$/; var isbn13Maybe = /^(?:[0-9]{13})$/; var factor = [1, 3]; - function isISBN(str) { var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; - assertString(str); version = String(version); + if (!version) { return isISBN(str, 10) || isISBN(str, 13); } + var sanitized = str.replace(/[\s-]+/g, ''); var checksum = 0; - var i = void 0; + var i; + if (version === '10') { if (!isbn10Maybe.test(sanitized)) { return false; } + for (i = 0; i < 9; i++) { checksum += (i + 1) * sanitized.charAt(i); } + if (sanitized.charAt(9) === 'X') { checksum += 10 * 10; } else { checksum += 10 * sanitized.charAt(9); } + if (checksum % 11 === 0) { return !!sanitized; } @@ -1086,38 +1305,44 @@ function isISBN(str) { if (!isbn13Maybe.test(sanitized)) { return false; } + for (i = 0; i < 12; i++) { checksum += factor[i % 2] * sanitized.charAt(i); } + if (sanitized.charAt(12) - (10 - checksum % 10) % 10 === 0) { return !!sanitized; } } + return false; } var issn = '^\\d{4}-?\\d{3}[\\dX]$'; - function isISSN(str) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - assertString(str); var testIssn = issn; testIssn = options.require_hyphen ? testIssn.replace('?', '') : testIssn; testIssn = options.case_sensitive ? new RegExp(testIssn) : new RegExp(testIssn, 'i'); + if (!testIssn.test(str)) { return false; } + var digits = str.replace('-', '').toUpperCase(); var checksum = 0; + for (var i = 0; i < digits.length; i++) { var digit = digits[i]; checksum += (digit === 'X' ? 10 : +digit) * (8 - i); } + return checksum % 11 === 0; } /* eslint-disable max-len */ + var phones = { 'ar-AE': /^((\+?971)|0)?5[024568]\d{7}$/, 'ar-DZ': /^(\+?213|0)(5|6|7)\d{8}$/, @@ -1188,74 +1413,77 @@ var phones = { 'zh-TW': /^(\+?886\-?|0)?9\d{8}$/ }; /* eslint-enable max-len */ - // aliases + phones['en-CA'] = phones['en-US']; phones['fr-BE'] = phones['nl-BE']; phones['zh-HK'] = phones['en-HK']; - function isMobilePhone(str, locale, options) { assertString(str); + if (options && options.strictMode && !str.startsWith('+')) { return false; } + if (Array.isArray(locale)) { return locale.some(function (key) { if (phones.hasOwnProperty(key)) { var phone = phones[key]; + if (phone.test(str)) { return true; } } + return false; }); } else if (locale in phones) { - return phones[locale].test(str); - // alias falsey locale as 'any' + return phones[locale].test(str); // alias falsey locale as 'any' } else if (!locale || locale === 'any') { for (var key in phones) { if (phones.hasOwnProperty(key)) { var phone = phones[key]; + if (phone.test(str)) { return true; } } } + return false; } - throw new Error('Invalid locale \'' + locale + '\''); -} + throw new Error("Invalid locale '".concat(locale, "'")); +} var locales$3 = Object.keys(phones); function currencyRegex(options) { - var decimal_digits = '\\d{' + options.digits_after_decimal[0] + '}'; + var decimal_digits = "\\d{".concat(options.digits_after_decimal[0], "}"); options.digits_after_decimal.forEach(function (digit, index) { - if (index !== 0) decimal_digits = decimal_digits + '|\\d{' + digit + '}'; + if (index !== 0) decimal_digits = "".concat(decimal_digits, "|\\d{").concat(digit, "}"); }); - var symbol = '(\\' + options.symbol.replace(/\./g, '\\.') + ')' + (options.require_symbol ? '' : '?'), + var symbol = "(\\".concat(options.symbol.replace(/\./g, '\\.'), ")").concat(options.require_symbol ? '' : '?'), negative = '-?', whole_dollar_amount_without_sep = '[1-9]\\d*', - whole_dollar_amount_with_sep = '[1-9]\\d{0,2}(\\' + options.thousands_separator + '\\d{3})*', + whole_dollar_amount_with_sep = "[1-9]\\d{0,2}(\\".concat(options.thousands_separator, "\\d{3})*"), valid_whole_dollar_amounts = ['0', whole_dollar_amount_without_sep, whole_dollar_amount_with_sep], - whole_dollar_amount = '(' + valid_whole_dollar_amounts.join('|') + ')?', - decimal_amount = '(\\' + options.decimal_separator + '(' + decimal_digits + '))' + (options.require_decimal ? '' : '?'); - var pattern = whole_dollar_amount + (options.allow_decimal || options.require_decimal ? decimal_amount : ''); + whole_dollar_amount = "(".concat(valid_whole_dollar_amounts.join('|'), ")?"), + decimal_amount = "(\\".concat(options.decimal_separator, "(").concat(decimal_digits, "))").concat(options.require_decimal ? '' : '?'); + var pattern = whole_dollar_amount + (options.allow_decimal || options.require_decimal ? decimal_amount : ''); // default is negative sign before symbol, but there are two other options (besides parens) - // default is negative sign before symbol, but there are two other options (besides parens) if (options.allow_negatives && !options.parens_for_negatives) { if (options.negative_sign_after_digits) { pattern += negative; } else if (options.negative_sign_before_digits) { pattern = negative + pattern; } - } + } // South African Rand, for example, uses R 123 (space) and R-123 (no space) + - // South African Rand, for example, uses R 123 (space) and R-123 (no space) if (options.allow_negative_sign_placeholder) { - pattern = '( (?!\\-))?' + pattern; + pattern = "( (?!\\-))?".concat(pattern); } else if (options.allow_space_after_symbol) { - pattern = ' ?' + pattern; + pattern = " ?".concat(pattern); } else if (options.allow_space_after_digits) { pattern += '( (?!$))?'; } @@ -1268,15 +1496,15 @@ function currencyRegex(options) { if (options.allow_negatives) { if (options.parens_for_negatives) { - pattern = '(\\(' + pattern + '\\)|' + pattern + ')'; + pattern = "(\\(".concat(pattern, "\\)|").concat(pattern, ")"); } else if (!(options.negative_sign_before_digits || options.negative_sign_after_digits)) { pattern = negative + pattern; } - } - - // ensure there's a dollar and/or decimal amount, and that + } // ensure there's a dollar and/or decimal amount, and that // it doesn't start with a space or a negative sign followed by a space - return new RegExp('^(?!-? )(?=.*\\d)' + pattern + '$'); + + + return new RegExp("^(?!-? )(?=.*\\d)".concat(pattern, "$")); } var default_currency_options = { @@ -1296,7 +1524,6 @@ var default_currency_options = { digits_after_decimal: [2], allow_space_after_digits: false }; - function isCurrency(str, options) { assertString(str); options = merge(options, default_currency_options); @@ -1305,33 +1532,37 @@ function isCurrency(str, options) { /* eslint-disable max-len */ // from http://goo.gl/0ejHHW + var iso8601 = /^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/; /* eslint-enable max-len */ + var isValidDate = function isValidDate(str) { // str must have passed the ISO8601 check // this check is meant to catch invalid dates // like 2009-02-31 // first check for ordinal dates var ordinalMatch = str.match(/^(\d{4})-?(\d{3})([ T]{1}\.*|$)/); + if (ordinalMatch) { var oYear = Number(ordinalMatch[1]); - var oDay = Number(ordinalMatch[2]); - // if is leap year - if (oYear % 4 === 0 && oYear % 100 !== 0) { - return oDay <= 366; - } + var oDay = Number(ordinalMatch[2]); // if is leap year + + if (oYear % 4 === 0 && oYear % 100 !== 0) return oDay <= 366; return oDay <= 365; } + var match = str.match(/(\d{4})-?(\d{0,2})-?(\d*)/).map(Number); var year = match[1]; var month = match[2]; - var day = match[3]; - // create a date object and compare - var d = new Date(year + '-' + (month || 1) + '-' + (day || 1)); + var day = match[3]; // create a date object and compare + + var d = new Date("".concat(year, "-").concat(month || 1, "-").concat(day || 1)); if (isNaN(d.getFullYear())) return false; + if (month && day) { return d.getFullYear() === year && d.getMonth() + 1 === month && d.getDate() === day; } + return true; }; @@ -1348,93 +1579,87 @@ function isISO8601(str, options) { var dateFullYear = /[0-9]{4}/; var dateMonth = /(0[1-9]|1[0-2])/; var dateMDay = /([12]\d|0[1-9]|3[01])/; - var timeHour = /([01][0-9]|2[0-3])/; var timeMinute = /[0-5][0-9]/; var timeSecond = /([0-5][0-9]|60)/; - var timeSecFrac = /(\.[0-9]+)?/; -var timeNumOffset = new RegExp('[-+]' + timeHour.source + ':' + timeMinute.source); -var timeOffset = new RegExp('([zZ]|' + timeNumOffset.source + ')'); - -var partialTime = new RegExp(timeHour.source + ':' + timeMinute.source + ':' + timeSecond.source + timeSecFrac.source); - -var fullDate = new RegExp(dateFullYear.source + '-' + dateMonth.source + '-' + dateMDay.source); -var fullTime = new RegExp('' + partialTime.source + timeOffset.source); - -var rfc3339 = new RegExp(fullDate.source + '[ tT]' + fullTime.source); - +var timeNumOffset = new RegExp("[-+]".concat(timeHour.source, ":").concat(timeMinute.source)); +var timeOffset = new RegExp("([zZ]|".concat(timeNumOffset.source, ")")); +var partialTime = new RegExp("".concat(timeHour.source, ":").concat(timeMinute.source, ":").concat(timeSecond.source).concat(timeSecFrac.source)); +var fullDate = new RegExp("".concat(dateFullYear.source, "-").concat(dateMonth.source, "-").concat(dateMDay.source)); +var fullTime = new RegExp("".concat(partialTime.source).concat(timeOffset.source)); +var rfc3339 = new RegExp("".concat(fullDate.source, "[ tT]").concat(fullTime.source)); function isRFC3339(str) { assertString(str); return rfc3339.test(str); } -// from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 var validISO31661Alpha2CountriesCodes = ['AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BR', 'BS', 'BT', 'BV', 'BW', 'BY', 'BZ', 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'FI', 'FJ', 'FK', 'FM', 'FO', 'FR', 'GA', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', 'GT', 'GU', 'GW', 'GY', 'HK', 'HM', 'HN', 'HR', 'HT', 'HU', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT', 'JE', 'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY', 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ', 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ', 'OM', 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY', 'QA', 'RE', 'RO', 'RS', 'RU', 'RW', 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', 'SZ', 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ', 'UA', 'UG', 'UM', 'US', 'UY', 'UZ', 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU', 'WF', 'WS', 'YE', 'YT', 'ZA', 'ZM', 'ZW']; - function isISO31661Alpha2(str) { assertString(str); return includes(validISO31661Alpha2CountriesCodes, str.toUpperCase()); } -// from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3 var validISO31661Alpha3CountriesCodes = ['AFG', 'ALA', 'ALB', 'DZA', 'ASM', 'AND', 'AGO', 'AIA', 'ATA', 'ATG', 'ARG', 'ARM', 'ABW', 'AUS', 'AUT', 'AZE', 'BHS', 'BHR', 'BGD', 'BRB', 'BLR', 'BEL', 'BLZ', 'BEN', 'BMU', 'BTN', 'BOL', 'BES', 'BIH', 'BWA', 'BVT', 'BRA', 'IOT', 'BRN', 'BGR', 'BFA', 'BDI', 'KHM', 'CMR', 'CAN', 'CPV', 'CYM', 'CAF', 'TCD', 'CHL', 'CHN', 'CXR', 'CCK', 'COL', 'COM', 'COG', 'COD', 'COK', 'CRI', 'CIV', 'HRV', 'CUB', 'CUW', 'CYP', 'CZE', 'DNK', 'DJI', 'DMA', 'DOM', 'ECU', 'EGY', 'SLV', 'GNQ', 'ERI', 'EST', 'ETH', 'FLK', 'FRO', 'FJI', 'FIN', 'FRA', 'GUF', 'PYF', 'ATF', 'GAB', 'GMB', 'GEO', 'DEU', 'GHA', 'GIB', 'GRC', 'GRL', 'GRD', 'GLP', 'GUM', 'GTM', 'GGY', 'GIN', 'GNB', 'GUY', 'HTI', 'HMD', 'VAT', 'HND', 'HKG', 'HUN', 'ISL', 'IND', 'IDN', 'IRN', 'IRQ', 'IRL', 'IMN', 'ISR', 'ITA', 'JAM', 'JPN', 'JEY', 'JOR', 'KAZ', 'KEN', 'KIR', 'PRK', 'KOR', 'KWT', 'KGZ', 'LAO', 'LVA', 'LBN', 'LSO', 'LBR', 'LBY', 'LIE', 'LTU', 'LUX', 'MAC', 'MKD', 'MDG', 'MWI', 'MYS', 'MDV', 'MLI', 'MLT', 'MHL', 'MTQ', 'MRT', 'MUS', 'MYT', 'MEX', 'FSM', 'MDA', 'MCO', 'MNG', 'MNE', 'MSR', 'MAR', 'MOZ', 'MMR', 'NAM', 'NRU', 'NPL', 'NLD', 'NCL', 'NZL', 'NIC', 'NER', 'NGA', 'NIU', 'NFK', 'MNP', 'NOR', 'OMN', 'PAK', 'PLW', 'PSE', 'PAN', 'PNG', 'PRY', 'PER', 'PHL', 'PCN', 'POL', 'PRT', 'PRI', 'QAT', 'REU', 'ROU', 'RUS', 'RWA', 'BLM', 'SHN', 'KNA', 'LCA', 'MAF', 'SPM', 'VCT', 'WSM', 'SMR', 'STP', 'SAU', 'SEN', 'SRB', 'SYC', 'SLE', 'SGP', 'SXM', 'SVK', 'SVN', 'SLB', 'SOM', 'ZAF', 'SGS', 'SSD', 'ESP', 'LKA', 'SDN', 'SUR', 'SJM', 'SWZ', 'SWE', 'CHE', 'SYR', 'TWN', 'TJK', 'TZA', 'THA', 'TLS', 'TGO', 'TKL', 'TON', 'TTO', 'TUN', 'TUR', 'TKM', 'TCA', 'TUV', 'UGA', 'UKR', 'ARE', 'GBR', 'USA', 'UMI', 'URY', 'UZB', 'VUT', 'VEN', 'VNM', 'VGB', 'VIR', 'WLF', 'ESH', 'YEM', 'ZMB', 'ZWE']; - function isISO31661Alpha3(str) { assertString(str); return includes(validISO31661Alpha3CountriesCodes, str.toUpperCase()); } var notBase64 = /[^A-Z0-9+\/=]/i; - function isBase64(str) { assertString(str); var len = str.length; + if (!len || len % 4 !== 0 || notBase64.test(str)) { return false; } + var firstPaddingChar = str.indexOf('='); return firstPaddingChar === -1 || firstPaddingChar === len - 1 || firstPaddingChar === len - 2 && str[len - 1] === '='; } var validMediaType = /^[a-z]+\/[a-z0-9\-\+]+$/i; - var validAttribute = /^[a-z\-]+=[a-z0-9\-]+$/i; - var validData = /^[a-z0-9!\$&'\(\)\*\+,;=\-\._~:@\/\?%\s]*$/i; - function isDataURI(str) { assertString(str); var data = str.split(','); + if (data.length < 2) { return false; } + var attributes = data.shift().trim().split(';'); var schemeAndMediaType = attributes.shift(); + if (schemeAndMediaType.substr(0, 5) !== 'data:') { return false; } + var mediaType = schemeAndMediaType.substr(5); + if (mediaType !== '' && !validMediaType.test(mediaType)) { return false; } + for (var i = 0; i < attributes.length; i++) { - if (i === attributes.length - 1 && attributes[i].toLowerCase() === 'base64') { - // ok + if (i === attributes.length - 1 && attributes[i].toLowerCase() === 'base64') {// ok } else if (!validAttribute.test(attributes[i])) { return false; } } + for (var _i = 0; _i < data.length; _i++) { if (!validData.test(data[_i])) { return false; } } + return true; } var magnetURI = /^magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32,40}&dn=.+&tr=.+$/i; - function isMagnetURI(url) { assertString(url); return magnetURI.test(url.trim()); @@ -1461,17 +1686,17 @@ function isMagnetURI(url) { - https://tools.ietf.org/html/rfc7231#section-3.1.1.1 - https://tools.ietf.org/html/rfc7231#section-3.1.1.5 */ - // Match simple MIME types // NB : // Subtype length must not exceed 100 characters. // This rule does not comply to the RFC specs (what is the max length ?). -var mimeTypeSimple = /^(application|audio|font|image|message|model|multipart|text|video)\/[a-zA-Z0-9\.\-\+]{1,100}$/i; // eslint-disable-line max-len +var mimeTypeSimple = /^(application|audio|font|image|message|model|multipart|text|video)\/[a-zA-Z0-9\.\-\+]{1,100}$/i; // eslint-disable-line max-len // Handle "charset" in "text/*" -var mimeTypeText = /^text\/[a-zA-Z0-9\.\-\+]{1,100};\s?charset=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?$/i; // eslint-disable-line max-len +var mimeTypeText = /^text\/[a-zA-Z0-9\.\-\+]{1,100};\s?charset=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?$/i; // eslint-disable-line max-len // Handle "boundary" in "multipart/*" + var mimeTypeMultipart = /^multipart\/[a-zA-Z0-9\.\-\+]{1,100}(;\s?(boundary|charset)=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?){0,2}$/i; // eslint-disable-line max-len function isMimeType(str) { @@ -1481,7 +1706,6 @@ function isMimeType(str) { var lat = /^\(?[+-]?(90(\.0+)?|[1-8]?\d(\.\d+)?)$/; var long = /^\s?[+-]?(180(\.0+)?|1[0-7]\d(\.\d+)?|\d{1,2}(\.\d+)?)\)?$/; - var isLatLong = function (str) { assertString(str); if (!str.includes(',')) return false; @@ -1489,12 +1713,10 @@ var isLatLong = function (str) { return lat.test(pair[0]) && long.test(pair[1]); }; -// common patterns var threeDigit = /^\d{3}$/; var fourDigit = /^\d{4}$/; var fiveDigit = /^\d{5}$/; var sixDigit = /^\d{6}$/; - var patterns = { AD: /^AD\d{3}$/, AT: fourDigit, @@ -1542,39 +1764,43 @@ var patterns = { ZA: fourDigit, ZM: fiveDigit }; - var locales$4 = Object.keys(patterns); - var isPostalCode = function (str, locale) { assertString(str); + if (locale in patterns) { return patterns[locale].test(str); } else if (locale === 'any') { for (var key in patterns) { if (patterns.hasOwnProperty(key)) { var pattern = patterns[key]; + if (pattern.test(str)) { return true; } } } + return false; } - throw new Error('Invalid locale \'' + locale + '\''); + + throw new Error("Invalid locale '".concat(locale, "'")); }; function ltrim(str, chars) { assertString(str); - var pattern = chars ? new RegExp('^[' + chars + ']+', 'g') : /^\s+/g; + var pattern = chars ? new RegExp("^[".concat(chars, "]+"), 'g') : /^\s+/g; return str.replace(pattern, ''); } function rtrim(str, chars) { assertString(str); - var pattern = chars ? new RegExp('[' + chars + ']') : /\s/; - + var pattern = chars ? new RegExp("[".concat(chars, "]")) : /\s/; var idx = str.length - 1; - for (; idx >= 0 && pattern.test(str[idx]); idx--) {} + + for (; idx >= 0 && pattern.test(str[idx]); idx--) { + + } return idx < str.length ? str.substr(0, idx + 1) : str; } @@ -1595,7 +1821,7 @@ function unescape(str) { function blacklist$1(str, chars) { assertString(str); - return str.replace(new RegExp('[' + chars + ']+', 'g'), ''); + return str.replace(new RegExp("[".concat(chars, "]+"), 'g'), ''); } function stripLow(str, keep_new_lines) { @@ -1606,16 +1832,18 @@ function stripLow(str, keep_new_lines) { function whitelist(str, chars) { assertString(str); - return str.replace(new RegExp('[^' + chars + ']+', 'g'), ''); + return str.replace(new RegExp("[^".concat(chars, "]+"), 'g'), ''); } function isWhitelisted(str, chars) { assertString(str); + for (var i = str.length - 1; i >= 0; i--) { if (chars.indexOf(str[i]) === -1) { return false; } } + return true; } @@ -1625,7 +1853,6 @@ var default_normalize_email_options = { // Please note this may violate RFC 5321 as per http://stackoverflow.com/a/9808332/192024). // The domain is always lowercased, as per RFC 1035 all_lowercase: true, - // The following conversions are specific to GMail // Lowercases the local part of the GMail address (known to be case-insensitive) gmail_lowercase: true, @@ -1635,63 +1862,53 @@ var default_normalize_email_options = { gmail_remove_subaddress: true, // Conversts the googlemail.com domain to gmail.com gmail_convert_googlemaildotcom: true, - // The following conversions are specific to Outlook.com / Windows Live / Hotmail // Lowercases the local part of the Outlook.com address (known to be case-insensitive) outlookdotcom_lowercase: true, // Removes the subaddress (e.g. "+foo") from the email address outlookdotcom_remove_subaddress: true, - // The following conversions are specific to Yahoo // Lowercases the local part of the Yahoo address (known to be case-insensitive) yahoo_lowercase: true, // Removes the subaddress (e.g. "-foo") from the email address yahoo_remove_subaddress: true, - // The following conversions are specific to Yandex // Lowercases the local part of the Yandex address (known to be case-insensitive) yandex_lowercase: true, - // The following conversions are specific to iCloud // Lowercases the local part of the iCloud address (known to be case-insensitive) icloud_lowercase: true, // Removes the subaddress (e.g. "+foo") from the email address icloud_remove_subaddress: true -}; - -// List of domains used by iCloud -var icloud_domains = ['icloud.com', 'me.com']; +}; // List of domains used by iCloud -// List of domains used by Outlook.com and its predecessors +var icloud_domains = ['icloud.com', 'me.com']; // List of domains used by Outlook.com and its predecessors // This list is likely incomplete. // Partial reference: // https://blogs.office.com/2013/04/17/outlook-com-gets-two-step-verification-sign-in-by-alias-and-new-international-domains/ -var outlookdotcom_domains = ['hotmail.at', 'hotmail.be', 'hotmail.ca', 'hotmail.cl', 'hotmail.co.il', 'hotmail.co.nz', 'hotmail.co.th', 'hotmail.co.uk', 'hotmail.com', 'hotmail.com.ar', 'hotmail.com.au', 'hotmail.com.br', 'hotmail.com.gr', 'hotmail.com.mx', 'hotmail.com.pe', 'hotmail.com.tr', 'hotmail.com.vn', 'hotmail.cz', 'hotmail.de', 'hotmail.dk', 'hotmail.es', 'hotmail.fr', 'hotmail.hu', 'hotmail.id', 'hotmail.ie', 'hotmail.in', 'hotmail.it', 'hotmail.jp', 'hotmail.kr', 'hotmail.lv', 'hotmail.my', 'hotmail.ph', 'hotmail.pt', 'hotmail.sa', 'hotmail.sg', 'hotmail.sk', 'live.be', 'live.co.uk', 'live.com', 'live.com.ar', 'live.com.mx', 'live.de', 'live.es', 'live.eu', 'live.fr', 'live.it', 'live.nl', 'msn.com', 'outlook.at', 'outlook.be', 'outlook.cl', 'outlook.co.il', 'outlook.co.nz', 'outlook.co.th', 'outlook.com', 'outlook.com.ar', 'outlook.com.au', 'outlook.com.br', 'outlook.com.gr', 'outlook.com.pe', 'outlook.com.tr', 'outlook.com.vn', 'outlook.cz', 'outlook.de', 'outlook.dk', 'outlook.es', 'outlook.fr', 'outlook.hu', 'outlook.id', 'outlook.ie', 'outlook.in', 'outlook.it', 'outlook.jp', 'outlook.kr', 'outlook.lv', 'outlook.my', 'outlook.ph', 'outlook.pt', 'outlook.sa', 'outlook.sg', 'outlook.sk', 'passport.com']; -// List of domains used by Yahoo Mail +var outlookdotcom_domains = ['hotmail.at', 'hotmail.be', 'hotmail.ca', 'hotmail.cl', 'hotmail.co.il', 'hotmail.co.nz', 'hotmail.co.th', 'hotmail.co.uk', 'hotmail.com', 'hotmail.com.ar', 'hotmail.com.au', 'hotmail.com.br', 'hotmail.com.gr', 'hotmail.com.mx', 'hotmail.com.pe', 'hotmail.com.tr', 'hotmail.com.vn', 'hotmail.cz', 'hotmail.de', 'hotmail.dk', 'hotmail.es', 'hotmail.fr', 'hotmail.hu', 'hotmail.id', 'hotmail.ie', 'hotmail.in', 'hotmail.it', 'hotmail.jp', 'hotmail.kr', 'hotmail.lv', 'hotmail.my', 'hotmail.ph', 'hotmail.pt', 'hotmail.sa', 'hotmail.sg', 'hotmail.sk', 'live.be', 'live.co.uk', 'live.com', 'live.com.ar', 'live.com.mx', 'live.de', 'live.es', 'live.eu', 'live.fr', 'live.it', 'live.nl', 'msn.com', 'outlook.at', 'outlook.be', 'outlook.cl', 'outlook.co.il', 'outlook.co.nz', 'outlook.co.th', 'outlook.com', 'outlook.com.ar', 'outlook.com.au', 'outlook.com.br', 'outlook.com.gr', 'outlook.com.pe', 'outlook.com.tr', 'outlook.com.vn', 'outlook.cz', 'outlook.de', 'outlook.dk', 'outlook.es', 'outlook.fr', 'outlook.hu', 'outlook.id', 'outlook.ie', 'outlook.in', 'outlook.it', 'outlook.jp', 'outlook.kr', 'outlook.lv', 'outlook.my', 'outlook.ph', 'outlook.pt', 'outlook.sa', 'outlook.sg', 'outlook.sk', 'passport.com']; // List of domains used by Yahoo Mail // This list is likely incomplete -var yahoo_domains = ['rocketmail.com', 'yahoo.ca', 'yahoo.co.uk', 'yahoo.com', 'yahoo.de', 'yahoo.fr', 'yahoo.in', 'yahoo.it', 'ymail.com']; -// List of domains used by yandex.ru -var yandex_domains = ['yandex.ru', 'yandex.ua', 'yandex.kz', 'yandex.com', 'yandex.by', 'ya.ru']; +var yahoo_domains = ['rocketmail.com', 'yahoo.ca', 'yahoo.co.uk', 'yahoo.com', 'yahoo.de', 'yahoo.fr', 'yahoo.in', 'yahoo.it', 'ymail.com']; // List of domains used by yandex.ru + +var yandex_domains = ['yandex.ru', 'yandex.ua', 'yandex.kz', 'yandex.com', 'yandex.by', 'ya.ru']; // replace single dots, but not multiple consecutive dots -// replace single dots, but not multiple consecutive dots function dotsReplacer(match) { if (match.length > 1) { return match; } + return ''; } function normalizeEmail(email, options) { options = merge(options, default_normalize_email_options); - var raw_parts = email.split('@'); var domain = raw_parts.pop(); var user = raw_parts.join('@'); - var parts = [user, domain]; + var parts = [user, domain]; // The domain is always lowercased, as it's case-insensitive per RFC 1035 - // The domain is always lowercased, as it's case-insensitive per RFC 1035 parts[1] = parts[1].toLowerCase(); if (parts[1] === 'gmail.com' || parts[1] === 'googlemail.com') { @@ -1699,25 +1916,31 @@ function normalizeEmail(email, options) { if (options.gmail_remove_subaddress) { parts[0] = parts[0].split('+')[0]; } + if (options.gmail_remove_dots) { // this does not replace consecutive dots like example..email@gmail.com parts[0] = parts[0].replace(/\.+/g, dotsReplacer); } + if (!parts[0].length) { return false; } + if (options.all_lowercase || options.gmail_lowercase) { parts[0] = parts[0].toLowerCase(); } + parts[1] = options.gmail_convert_googlemaildotcom ? 'gmail.com' : parts[1]; } else if (icloud_domains.indexOf(parts[1]) >= 0) { // Address is iCloud if (options.icloud_remove_subaddress) { parts[0] = parts[0].split('+')[0]; } + if (!parts[0].length) { return false; } + if (options.all_lowercase || options.icloud_lowercase) { parts[0] = parts[0].toLowerCase(); } @@ -1726,9 +1949,11 @@ function normalizeEmail(email, options) { if (options.outlookdotcom_remove_subaddress) { parts[0] = parts[0].split('+')[0]; } + if (!parts[0].length) { return false; } + if (options.all_lowercase || options.outlookdotcom_lowercase) { parts[0] = parts[0].toLowerCase(); } @@ -1738,9 +1963,11 @@ function normalizeEmail(email, options) { var components = parts[0].split('-'); parts[0] = components.length > 1 ? components.slice(0, -1).join('-') : components[0]; } + if (!parts[0].length) { return false; } + if (options.all_lowercase || options.yahoo_lowercase) { parts[0] = parts[0].toLowerCase(); } @@ -1748,16 +1975,17 @@ function normalizeEmail(email, options) { if (options.all_lowercase || options.yandex_lowercase) { parts[0] = parts[0].toLowerCase(); } + parts[1] = 'yandex.ru'; // all yandex domains are equal, 1st preffered } else if (options.all_lowercase) { // Any other address parts[0] = parts[0].toLowerCase(); } + return parts.join('@'); } var version = '10.8.0'; - var validator = { version: version, toDate: toDate, diff --git a/validator.min.js b/validator.min.js index 3689b3148..5908811f8 100644 --- a/validator.min.js +++ b/validator.min.js @@ -20,4 +20,4 @@ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.validator=t()}(this,function(){"use strict";function e(e){if(!("string"==typeof e||e instanceof String)){var t=void 0;throw t=null===e?"null":"object"===(t=void 0===e?"undefined":$(e))&&e.constructor&&e.constructor.hasOwnProperty("name")?e.constructor.name:"a "+t,new TypeError("Expected string but received "+t+".")}}function t(t){return e(t),t=Date.parse(t),isNaN(t)?null:new Date(t)}function r(t){return e(t),parseFloat(t)}function i(e){return"object"===(void 0===e?"undefined":$(e))&&null!==e?e="function"==typeof e.toString?e.toString():"[object Object]":(null===e||void 0===e||isNaN(e)&&!e.length)&&(e=""),String(e)}function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1];for(var r in t)void 0===e[r]&&(e[r]=t[r]);return e}function n(t,r){e(t);var i=void 0,o=void 0;"object"===(void 0===r?"undefined":$(r))?(i=r.min||0,o=r.max):(i=arguments[1],o=arguments[2]);var n=encodeURI(t).split(/%..|./).length-1;return n>=i&&(void 0===o||n<=o)}function a(t,r){e(t),(r=o(r,_)).allow_trailing_dot&&"."===t[t.length-1]&&(t=t.substring(0,t.length-1));for(var i=t.split("."),n=0;n63)return!1;if(r.require_tld){var a=i.pop();if(!i.length||!/^([a-z\u00a1-\uffff]{2,}|xn[a-z0-9-]{2,})$/i.test(a))return!1;if(/[\s\u2002-\u200B\u202F\u205F\u3000\uFEFF\uDB40\uDC20]/.test(a))return!1}for(var l,s=0;s1&&void 0!==arguments[1]?arguments[1]:"";if(e(t),!(r=String(r)))return l(t,4)||l(t,6);if("4"===r){if(!v.test(t))return!1;return t.split(".").sort(function(e,t){return e-t})[3]<=255}if("6"===r){var i=t.split(":"),o=!1,n=l(i[i.length-1],4),a=n?7:8;if(i.length>a)return!1;if("::"===t)return!0;"::"===t.substr(0,2)?(i.shift(),i.shift(),o=!0):"::"===t.substr(t.length-2)&&(i.pop(),i.pop(),o=!0);for(var s=0;s0&&s=1:i.length===a}return!1}function s(e){return"[object RegExp]"===Object.prototype.toString.call(e)}function u(e,t){for(var r=0;r=r.min,n=!r.hasOwnProperty("max")||t<=r.max,a=!r.hasOwnProperty("lt")||tr.gt;return i.test(t)&&o&&n&&a&&l}function c(t){return e(t),le.test(t)}function f(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(e(t),!(r=String(r)))return f(t,10)||f(t,13);var i=t.replace(/[\s-]+/g,""),o=0,n=void 0;if("10"===r){if(!$e.test(i))return!1;for(n=0;n<9;n++)o+=(n+1)*i.charAt(n);if("X"===i.charAt(9)?o+=100:o+=10*i.charAt(9),o%11==0)return!!i}else if("13"===r){if(!_e.test(i))return!1;for(n=0;n<12;n++)o+=ve[n%2]*i.charAt(n);if(i.charAt(12)-(10-o%10)%10==0)return!!i}return!1}function p(t,r){e(t);var i=r?new RegExp("^["+r+"]+","g"):/^\s+/g;return t.replace(i,"")}function g(t,r){e(t);for(var i=r?new RegExp("["+r+"]"):/\s/,o=t.length-1;o>=0&&i.test(t[o]);o--);return o1?e:""}for(var m,$="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_={require_tld:!0,allow_underscores:!1,allow_trailing_dot:!1},v=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/,F=/^[0-9A-F]{1,4}$/i,S={allow_display_name:!1,require_display_name:!1,allow_utf8_local_part:!0,require_tld:!0},R=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\,\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\s]*<(.+)>$/i,E=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i,x=/^[a-z\d]+$/,N=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f]))*$/i,M=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$/i,w=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*$/i,C={protocols:["http","https","ftp"],require_tld:!0,require_protocol:!1,require_host:!0,require_valid_protocol:!0,allow_underscores:!1,allow_trailing_dot:!1,allow_protocol_relative_urls:!1},L=/^\[([^\]]+)\](?::([0-9]+))?$/,I=/^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$/,Z=/^([0-9a-fA-F]){12}$/,T=/^\d{1,2}$/,B={"en-US":/^[A-Z]+$/i,"bg-BG":/^[А-Я]+$/i,"cs-CZ":/^[A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]+$/i,"da-DK":/^[A-ZÆØÅ]+$/i,"de-DE":/^[A-ZÄÖÜß]+$/i,"el-GR":/^[Α-ω]+$/i,"es-ES":/^[A-ZÁÉÍÑÓÚÜ]+$/i,"fr-FR":/^[A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/i,"it-IT":/^[A-ZÀÉÈÌÎÓÒÙ]+$/i,"nb-NO":/^[A-ZÆØÅ]+$/i,"nl-NL":/^[A-ZÁÉËÏÓÖÜÚ]+$/i,"nn-NO":/^[A-ZÆØÅ]+$/i,"hu-HU":/^[A-ZÁÉÍÓÖŐÚÜŰ]+$/i,"pl-PL":/^[A-ZĄĆĘŚŁŃÓŻŹ]+$/i,"pt-PT":/^[A-ZÃÁÀÂÇÉÊÍÕÓÔÚÜ]+$/i,"ru-RU":/^[А-ЯЁ]+$/i,"sl-SI":/^[A-ZČĆĐŠŽ]+$/i,"sk-SK":/^[A-ZÁČĎÉÍŇÓŠŤÚÝŽĹŔĽÄÔ]+$/i,"sr-RS@latin":/^[A-ZČĆŽŠĐ]+$/i,"sr-RS":/^[А-ЯЂЈЉЊЋЏ]+$/i,"sv-SE":/^[A-ZÅÄÖ]+$/i,"tr-TR":/^[A-ZÇĞİıÖŞÜ]+$/i,"uk-UA":/^[А-ЩЬЮЯЄIЇҐі]+$/i,"ku-IQ":/^[ئابپتجچحخدرڕزژسشعغفڤقکگلڵمنوۆھەیێيطؤثآإأكضصةظذ]+$/i,ar:/^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/},y={"en-US":/^[0-9A-Z]+$/i,"bg-BG":/^[0-9А-Я]+$/i,"cs-CZ":/^[0-9A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]+$/i,"da-DK":/^[0-9A-ZÆØÅ]+$/i,"de-DE":/^[0-9A-ZÄÖÜß]+$/i,"el-GR":/^[0-9Α-ω]+$/i,"es-ES":/^[0-9A-ZÁÉÍÑÓÚÜ]+$/i,"fr-FR":/^[0-9A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/i,"it-IT":/^[0-9A-ZÀÉÈÌÎÓÒÙ]+$/i,"hu-HU":/^[0-9A-ZÁÉÍÓÖŐÚÜŰ]+$/i,"nb-NO":/^[0-9A-ZÆØÅ]+$/i,"nl-NL":/^[0-9A-ZÁÉËÏÓÖÜÚ]+$/i,"nn-NO":/^[0-9A-ZÆØÅ]+$/i,"pl-PL":/^[0-9A-ZĄĆĘŚŁŃÓŻŹ]+$/i,"pt-PT":/^[0-9A-ZÃÁÀÂÇÉÊÍÕÓÔÚÜ]+$/i,"ru-RU":/^[0-9А-ЯЁ]+$/i,"sl-SI":/^[0-9A-ZČĆĐŠŽ]+$/i,"sk-SK":/^[0-9A-ZÁČĎÉÍŇÓŠŤÚÝŽĹŔĽÄÔ]+$/i,"sr-RS@latin":/^[0-9A-ZČĆŽŠĐ]+$/i,"sr-RS":/^[0-9А-ЯЂЈЉЊЋЏ]+$/i,"sv-SE":/^[0-9A-ZÅÄÖ]+$/i,"tr-TR":/^[0-9A-ZÇĞİıÖŞÜ]+$/i,"uk-UA":/^[0-9А-ЩЬЮЯЄIЇҐі]+$/i,"ku-IQ":/^[٠١٢٣٤٥٦٧٨٩0-9ئابپتجچحخدرڕزژسشعغفڤقکگلڵمنوۆھەیێيطؤثآإأكضصةظذ]+$/i,ar:/^[٠١٢٣٤٥٦٧٨٩0-9ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/},b={"en-US":".",ar:"٫"},D=["AU","GB","HK","IN","NZ","ZA","ZM"],O=0;O=0},matches:function(t,r,i){return e(t),"[object RegExp]"!==Object.prototype.toString.call(r)&&(r=new RegExp(r,i)),r.test(t)},isEmail:function(t,r){if(e(t),(r=o(r,S)).require_display_name||r.allow_display_name){var i=t.match(R);if(i)t=i[1];else if(r.require_display_name)return!1}var s=t.split("@"),u=s.pop(),d=s.join("@"),c=u.toLowerCase();if(r.domain_specific_validation&&("gmail.com"===c||"googlemail.com"===c)){var f=(d=d.toLowerCase()).split("+")[0];if(!n(f.replace(".",""),{min:6,max:30}))return!1;for(var p=f.split("."),g=0;g=2083||/[\s<>]/.test(t))return!1;if(0===t.indexOf("mailto:"))return!1;r=o(r,C);var i=void 0,n=void 0,s=void 0,d=void 0,c=void 0,f=void 0,p=void 0,g=void 0;if(p=t.split("#"),t=p.shift(),p=t.split("?"),t=p.shift(),(p=t.split("://")).length>1){if(i=p.shift().toLowerCase(),r.require_valid_protocol&&-1===r.protocols.indexOf(i))return!1}else{if(r.require_protocol)return!1;if("//"===t.substr(0,2)){if(!r.allow_protocol_relative_urls)return!1;p[0]=t.substr(2)}}if(""===(t=p.join("://")))return!1;if(p=t.split("/"),""===(t=p.shift())&&!r.require_host)return!0;if((p=t.split("@")).length>1){if(r.disallow_auth)return!1;if((n=p.shift()).indexOf(":")>=0&&n.split(":").length>2)return!1}f=null,g=null;var h=(d=p.join("@")).match(L);return h?(s="",g=h[1],f=h[2]||null):(s=(p=d.split(":")).shift(),p.length&&(f=p.join(":"))),!(null!==f&&(c=parseInt(f,10),!/^[0-9]+$/.test(f)||c<=0||c>65535)||!(l(s)||a(s,r)||g&&l(g,6))||(s=s||g,r.host_whitelist&&!u(s,r.host_whitelist)||r.host_blacklist&&u(s,r.host_blacklist)))},isMACAddress:function(t,r){return e(t),r&&r.no_colons?Z.test(t):I.test(t)},isIP:l,isIPRange:function(t){e(t);var r=t.split("/");return 2===r.length&&!!T.test(r[1])&&!(r[1].length>1&&r[1].startsWith("0"))&&l(r[0],4)&&r[1]<=32&&r[1]>=0},isFQDN:a,isBoolean:function(t){return e(t),["true","false","1","0"].indexOf(t)>=0},isAlpha:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"en-US";if(e(t),r in B)return B[r].test(t);throw new Error("Invalid locale '"+r+"'")},isAlphaLocales:W,isAlphanumeric:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"en-US";if(e(t),r in y)return y[r].test(t);throw new Error("Invalid locale '"+r+"'")},isAlphanumericLocales:Y,isNumeric:function(t,r){return e(t),r&&r.no_symbols?j.test(t):V.test(t)},isPort:function(e){return d(e,{min:0,max:65535})},isLowercase:function(t){return e(t),t===t.toLowerCase()},isUppercase:function(t){return e(t),t===t.toUpperCase()},isAscii:function(t){return e(t),Q.test(t)},isFullWidth:function(t){return e(t),X.test(t)},isHalfWidth:function(t){return e(t),ee.test(t)},isVariableWidth:function(t){return e(t),X.test(t)&&ee.test(t)},isMultibyte:function(t){return e(t),te.test(t)},isSurrogatePair:function(t){return e(t),re.test(t)},isInt:d,isFloat:function(t,r){e(t),r=r||{};var i=new RegExp("^(?:[-+])?(?:[0-9]+)?(?:\\"+(r.locale?b[r.locale]:".")+"[0-9]*)?(?:[eE][\\+\\-]?(?:[0-9]+))?$");if(""===t||"."===t||"-"===t||"+"===t)return!1;var o=parseFloat(t.replace(",","."));return i.test(t)&&(!r.hasOwnProperty("min")||o>=r.min)&&(!r.hasOwnProperty("max")||o<=r.max)&&(!r.hasOwnProperty("lt")||or.gt)},isFloatLocales:ie,isDecimal:function(t,r){if(e(t),(r=o(r,ne)).locale in b)return!oe(ae,t.replace(/ /g,""))&&function(e){return new RegExp("^[-+]?([0-9]+)?(\\"+b[e.locale]+"[0-9]{"+e.decimal_digits+"})"+(e.force_decimal?"":"?")+"$")}(r).test(t);throw new Error("Invalid locale '"+r.locale+"'")},isHexadecimal:c,isDivisibleBy:function(t,i){return e(t),r(t)%parseInt(i,10)==0},isHexColor:function(t){return e(t),se.test(t)},isISRC:function(t){return e(t),ue.test(t)},isMD5:function(t){return e(t),de.test(t)},isHash:function(t,r){return e(t),new RegExp("^[a-f0-9]{"+ce[r]+"}$").test(t)},isJWT:function(t){return e(t),fe.test(t)},isJSON:function(t){e(t);try{var r=JSON.parse(t);return!!r&&"object"===(void 0===r?"undefined":$(r))}catch(e){}return!1},isEmpty:function(t,r){return e(t),0===((r=o(r,pe)).ignore_whitespace?t.trim().length:t.length)},isLength:function(t,r){e(t);var i=void 0,o=void 0;"object"===(void 0===r?"undefined":$(r))?(i=r.min||0,o=r.max):(i=arguments[1],o=arguments[2]);var n=t.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g)||[],a=t.length-n.length;return a>=i&&(void 0===o||a<=o)},isByteLength:n,isUUID:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"all";e(t);var i=ge[r];return i&&i.test(t)},isMongoId:function(t){return e(t),c(t)&&24===t.length},isAfter:function(r){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:String(new Date);e(r);var o=t(i),n=t(r);return!!(n&&o&&n>o)},isBefore:function(r){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:String(new Date);e(r);var o=t(i),n=t(r);return!!(n&&o&&n=0}return"object"===(void 0===r?"undefined":$(r))?r.hasOwnProperty(t):!(!r||"function"!=typeof r.indexOf)&&r.indexOf(t)>=0},isCreditCard:function(t){e(t);var r=t.replace(/[- ]+/g,"");if(!he.test(r))return!1;for(var i=0,o=void 0,n=void 0,a=void 0,l=r.length-1;l>=0;l--)o=r.substring(l,l+1),n=parseInt(o,10),i+=a&&(n*=2)>=10?n%10+1:n,a=!a;return!(i%10!=0||!r)},isIdentityCard:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"any";if(e(t),r in Ae)return Ae[r](t);if("any"===r){for(var i in Ae)if(Ae.hasOwnProperty(i)&&(0,Ae[i])(t))return!0;return!1}throw new Error("Invalid locale '"+r+"'")},isISIN:function(t){if(e(t),!me.test(t))return!1;for(var r=t.replace(/[A-Z]/g,function(e){return parseInt(e,36)}),i=0,o=void 0,n=void 0,a=!0,l=r.length-2;l>=0;l--)o=r.substring(l,l+1),n=parseInt(o,10),i+=a&&(n*=2)>=10?n+1:n,a=!a;return parseInt(t.substr(t.length-1),10)===(1e4-i)%10},isISBN:f,isISSN:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};e(t);var i=Fe;if(i=r.require_hyphen?i.replace("?",""):i,!(i=r.case_sensitive?new RegExp(i):new RegExp(i,"i")).test(t))return!1;for(var o=t.replace("-","").toUpperCase(),n=0,a=0;a/g,">").replace(/\//g,"/").replace(/\\/g,"\").replace(/`/g,"`")},unescape:function(t){return e(t),t.replace(/&/g,"&").replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(///g,"/").replace(/\/g,"\\").replace(/`/g,"`")},stripLow:function(t,r){return e(t),h(t,r?"\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F":"\\x00-\\x1F\\x7F")},whitelist:function(t,r){return e(t),t.replace(new RegExp("[^"+r+"]+","g"),"")},blacklist:h,isWhitelisted:function(t,r){e(t);for(var i=t.length-1;i>=0;i--)if(-1===r.indexOf(t[i]))return!1;return!0},normalizeEmail:function(e,t){t=o(t,qe);var r=e.split("@"),i=r.pop(),n=[r.join("@"),i];if(n[1]=n[1].toLowerCase(),"gmail.com"===n[1]||"googlemail.com"===n[1]){if(t.gmail_remove_subaddress&&(n[0]=n[0].split("+")[0]),t.gmail_remove_dots&&(n[0]=n[0].replace(/\.+/g,A)),!n[0].length)return!1;(t.all_lowercase||t.gmail_lowercase)&&(n[0]=n[0].toLowerCase()),n[1]=t.gmail_convert_googlemaildotcom?"gmail.com":n[1]}else if(Qe.indexOf(n[1])>=0){if(t.icloud_remove_subaddress&&(n[0]=n[0].split("+")[0]),!n[0].length)return!1;(t.all_lowercase||t.icloud_lowercase)&&(n[0]=n[0].toLowerCase())}else if(Xe.indexOf(n[1])>=0){if(t.outlookdotcom_remove_subaddress&&(n[0]=n[0].split("+")[0]),!n[0].length)return!1;(t.all_lowercase||t.outlookdotcom_lowercase)&&(n[0]=n[0].toLowerCase())}else if(et.indexOf(n[1])>=0){if(t.yahoo_remove_subaddress){var a=n[0].split("-");n[0]=a.length>1?a.slice(0,-1).join("-"):a[0]}if(!n[0].length)return!1;(t.all_lowercase||t.yahoo_lowercase)&&(n[0]=n[0].toLowerCase())}else tt.indexOf(n[1])>=0?((t.all_lowercase||t.yandex_lowercase)&&(n[0]=n[0].toLowerCase()),n[1]="yandex.ru"):t.all_lowercase&&(n[0]=n[0].toLowerCase());return n.join("@")},toString:i}}); \ No newline at end of file +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.validator=e()}(this,function(){"use strict";function a(t){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function g(t){var e;if(!("string"==typeof t||t instanceof String))throw e=null===t?"null":"object"===(e=a(t))&&t.constructor&&t.constructor.hasOwnProperty("name")?t.constructor.name:"a ".concat(e),new TypeError("Expected string but received ".concat(e,"."))}function n(t){return g(t),t=Date.parse(t),isNaN(t)?null:new Date(t)}function r(t){return g(t),parseFloat(t)}function i(t){return"object"===a(t)&&null!==t?t="function"==typeof t.toString?t.toString():"[object Object]":(null==t||isNaN(t)&&!t.length)&&(t=""),String(t)}function h(){var t=0i)return!1;if("::"===t)return!0;"::"===t.substr(0,2)?(r.shift(),r.shift(),o=!0):"::"===t.substr(t.length-2)&&(r.pop(),r.pop(),o=!0);for(var a=0;a$/i,F=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i,S=/^[a-z\d]+$/,R=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f]))*$/i,E=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$/i,x=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*$/i;var d={protocols:["http","https","ftp"],require_tld:!0,require_protocol:!1,require_host:!0,require_valid_protocol:!0,allow_underscores:!1,allow_trailing_dot:!1,allow_protocol_relative_urls:!1},f=/^\[([^\]]+)\](?::([0-9]+))?$/;function p(t,e){for(var r=0;r=e.min,n=!e.hasOwnProperty("max")||t<=e.max,i=!e.hasOwnProperty("lt")||te.gt;return r.test(t)&&o&&n&&i&&a}var z=/^[\x00-\x7F]+$/;var W=/[^\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/;var Y=/[\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/;var V=/[^\x00-\x7F]/;var j=/[\uD800-\uDBFF][\uDC00-\uDFFF]/;var J=Object.keys(C),q=function(t,e){return t.some(function(t){return e===t})};var Q={force_decimal:!1,decimal_digits:"1,",locale:"en-US"},X=["","-","+"];var tt=/^[0-9A-F]+$/i;function et(t){return g(t),tt.test(t)}var rt=/^#?([0-9A-F]{3}|[0-9A-F]{6})$/i;var ot=/^[A-Z]{2}[0-9A-Z]{3}\d{2}\d{5}$/;var nt=/^[a-f0-9]{32}$/;var it={md5:32,md4:32,sha1:40,sha256:64,sha384:96,sha512:128,ripemd128:32,ripemd160:40,tiger128:32,tiger160:40,tiger192:48,crc32:8,crc32b:8};var at=/^([A-Za-z0-9\-_~+\/]+[=]{0,2})\.([A-Za-z0-9\-_~+\/]+[=]{0,2})(?:\.([A-Za-z0-9\-_~+\/]+[=]{0,2}))?$/;var lt={ignore_whitespace:!1};var st={3:/^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i,4:/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,5:/^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,all:/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i};var ut=/^(?:4[0-9]{12}(?:[0-9]{3})?|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}|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})$/;var ct={ES:function(t){g(t);var e={X:0,Y:1,Z:2},r=t.trim().toUpperCase();if(!/^[0-9X-Z][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/.test(r))return!1;var o=r.slice(0,-1).replace(/[X,Y,Z]/g,function(t){return e[t]});return r.endsWith(["T","R","W","A","G","M","Y","F","P","D","X","B","N","J","Z","S","Q","V","H","L","C","K","E"][o%23])}};var dt=/^[A-Z]{2}[0-9A-Z]{9}[0-9]$/;var ft=/^(?:[0-9]{9}X|[0-9]{10})$/,pt=/^(?:[0-9]{13})$/,gt=[1,3];var ht={"ar-AE":/^((\+?971)|0)?5[024568]\d{7}$/,"ar-DZ":/^(\+?213|0)(5|6|7)\d{8}$/,"ar-EG":/^((\+?20)|0)?1[012]\d{8}$/,"ar-IQ":/^(\+?964|0)?7[0-9]\d{8}$/,"ar-JO":/^(\+?962|0)?7[789]\d{7}$/,"ar-KW":/^(\+?965)[569]\d{7}$/,"ar-SA":/^(!?(\+?966)|0)?5\d{8}$/,"ar-SY":/^(!?(\+?963)|0)?9\d{8}$/,"ar-TN":/^(\+?216)?[2459]\d{7}$/,"be-BY":/^(\+?375)?(24|25|29|33|44)\d{7}$/,"bg-BG":/^(\+?359|0)?8[789]\d{7}$/,"bn-BD":/\+?(88)?0?1[156789][0-9]{8}\b/,"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[ \.\-]?)?([\(]{1}[0-9]{1,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/,"el-GR":/^(\+?30|0)?(69\d{8})$/,"en-AU":/^(\+?61|0)4\d{8}$/,"en-GB":/^(\+?44|0)7\d{9}$/,"en-HK":/^(\+?852\-?)?[456789]\d{3}\-?\d{4}$/,"en-IN":/^(\+?91|0)?[6789]\d{9}$/,"en-KE":/^(\+?254|0)?[7]\d{8}$/,"en-NG":/^(\+?234|0)?[789]\d{9}$/,"en-NZ":/^(\+?64|0)[28]\d{7,9}$/,"en-PK":/^((\+92)|(0092))-{0,1}\d{3}-{0,1}\d{7}$|^\d{11}$|^\d{4}-\d{7}$/,"en-RW":/^(\+?250|0)?[7]\d{8}$/,"en-SG":/^(\+65)?[89]\d{7}$/,"en-TZ":/^(\+?255|0)?[67]\d{8}$/,"en-UG":/^(\+?256|0)?[7]\d{8}$/,"en-US":/^(\+?1?( |-)?)?(\([2-9][0-9]{2}\)|[2-9][0-9]{2})( |-)?([2-9][0-9]{2}( |-)?[0-9]{4})$/,"en-ZA":/^(\+?27|0)\d{9}$/,"en-ZM":/^(\+?26)?09[567]\d{7}$/,"es-ES":/^(\+?34)?(6\d{1}|7[1234])\d{7}$/,"es-MX":/^(\+?52)?(1|01)?\d{10,11}$/,"es-UY":/^(\+598|0)9[1-9][\d]{6}$/,"et-EE":/^(\+?372)?\s?(5|8[1-4])\s?([0-9]\s?){6,7}$/,"fa-IR":/^(\+?98[\-\s]?|0)9[0-39]\d[\-\s]?\d{3}[\-\s]?\d{4}$/,"fi-FI":/^(\+?358|0)\s?(4(0|1|2|4|5|6)?|50)\s?(\d\s?){4,8}\d$/,"fo-FO":/^(\+?298)?\s?\d{2}\s?\d{2}\s?\d{2}$/,"fr-FR":/^(\+?33|0)[67]\d{8}$/,"he-IL":/^(\+972|0)([23489]|5[012345689]|77)[1-9]\d{6}$/,"hu-HU":/^(\+?36)(20|30|70)\d{7}$/,"id-ID":/^(\+?62|0)(0?8?\d\d\s?\d?)([\s?|\d]{7,12})$/,"it-IT":/^(\+?39)?\s?3\d{2} ?\d{6,7}$/,"ja-JP":/^(\+?81|0)[789]0[ \-]?[1-9]\d{2}[ \-]?\d{5}$/,"kk-KZ":/^(\+?7|8)?7\d{9}$/,"kl-GL":/^(\+?299)?\s?\d{2}\s?\d{2}\s?\d{2}$/,"ko-KR":/^((\+?82)[ \-]?)?0?1([0|1|6|7|8|9]{1})[ \-]?\d{3,4}[ \-]?\d{4}$/,"lt-LT":/^(\+370|8)\d{8}$/,"ms-MY":/^(\+?6?01){1}(([145]{1}(\-|\s)?\d{7,8})|([236789]{1}(\s|\-)?\d{7}))$/,"nb-NO":/^(\+?47)?[49]\d{7}$/,"nl-BE":/^(\+?32|0)4?\d{8}$/,"nn-NO":/^(\+?47)?[49]\d{7}$/,"pl-PL":/^(\+?48)? ?[5-8]\d ?\d{3} ?\d{2} ?\d{2}$/,"pt-BR":/(?=^(\+?5{2}\-?|0)[1-9]{2}\-?\d{4}\-?\d{4}$)(^(\+?5{2}\-?|0)[1-9]{2}\-?[6-9]{1}\d{3}\-?\d{4}$)|(^(\+?5{2}\-?|0)[1-9]{2}\-?9[6-9]{1}\d{3}\-?\d{4}$)/,"pt-PT":/^(\+?351)?9[1236]\d{7}$/,"ro-RO":/^(\+?4?0)\s?7\d{2}(\/|\s|\.|\-)?\d{3}(\s|\.|\-)?\d{3}$/,"ru-RU":/^(\+?7|8)?9\d{9}$/,"sl-SI":/^(\+386\s?|0)(\d{1}\s?\d{3}\s?\d{2}\s?\d{2}|\d{2}\s?\d{3}\s?\d{3})$/,"sk-SK":/^(\+?421)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,"sr-RS":/^(\+3816|06)[- \d]{5,9}$/,"sv-SE":/^(\+?46|0)[\s\-]?7[\s\-]?[02369]([\s\-]?\d){7}$/,"th-TH":/^(\+66|66|0)\d{9}$/,"tr-TR":/^(\+?90|0)?5\d{9}$/,"uk-UA":/^(\+?38|8)?0\d{9}$/,"vi-VN":/^(\+?84|0)((3([2-9]))|(5([689]))|(7([0|6-9]))|(8([1-5]))|(9([0-9])))([0-9]{7})$/,"zh-CN":/^((\+|00)86)?1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$/,"zh-TW":/^(\+?886\-?|0)?9\d{8}$/};ht["en-CA"]=ht["en-US"],ht["fr-BE"]=ht["nl-BE"],ht["zh-HK"]=ht["en-HK"];var At=Object.keys(ht);var mt={symbol:"$",require_symbol:!1,allow_space_after_symbol:!1,symbol_after_digits:!1,allow_negatives:!0,parens_for_negatives:!1,negative_sign_before_digits:!1,negative_sign_after_digits:!1,allow_negative_sign_placeholder:!1,thousands_separator:",",decimal_separator:".",allow_decimal:!0,require_decimal:!1,digits_after_decimal:[2],allow_space_after_digits:!1};var $t=/^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/;var vt=/([01][0-9]|2[0-3])/,_t=/[0-5][0-9]/,Ft=new RegExp("[-+]".concat(vt.source,":").concat(_t.source)),St=new RegExp("([zZ]|".concat(Ft.source,")")),Rt=new RegExp("".concat(vt.source,":").concat(_t.source,":").concat(/([0-5][0-9]|60)/.source).concat(/(\.[0-9]+)?/.source)),Et=new RegExp("".concat(/[0-9]{4}/.source,"-").concat(/(0[1-9]|1[0-2])/.source,"-").concat(/([12]\d|0[1-9]|3[01])/.source)),xt=new RegExp("".concat(Rt.source).concat(St.source)),Nt=new RegExp("".concat(Et.source,"[ tT]").concat(xt.source));var Mt=["AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","YT","ZA","ZM","ZW"];var wt=["AFG","ALA","ALB","DZA","ASM","AND","AGO","AIA","ATA","ATG","ARG","ARM","ABW","AUS","AUT","AZE","BHS","BHR","BGD","BRB","BLR","BEL","BLZ","BEN","BMU","BTN","BOL","BES","BIH","BWA","BVT","BRA","IOT","BRN","BGR","BFA","BDI","KHM","CMR","CAN","CPV","CYM","CAF","TCD","CHL","CHN","CXR","CCK","COL","COM","COG","COD","COK","CRI","CIV","HRV","CUB","CUW","CYP","CZE","DNK","DJI","DMA","DOM","ECU","EGY","SLV","GNQ","ERI","EST","ETH","FLK","FRO","FJI","FIN","FRA","GUF","PYF","ATF","GAB","GMB","GEO","DEU","GHA","GIB","GRC","GRL","GRD","GLP","GUM","GTM","GGY","GIN","GNB","GUY","HTI","HMD","VAT","HND","HKG","HUN","ISL","IND","IDN","IRN","IRQ","IRL","IMN","ISR","ITA","JAM","JPN","JEY","JOR","KAZ","KEN","KIR","PRK","KOR","KWT","KGZ","LAO","LVA","LBN","LSO","LBR","LBY","LIE","LTU","LUX","MAC","MKD","MDG","MWI","MYS","MDV","MLI","MLT","MHL","MTQ","MRT","MUS","MYT","MEX","FSM","MDA","MCO","MNG","MNE","MSR","MAR","MOZ","MMR","NAM","NRU","NPL","NLD","NCL","NZL","NIC","NER","NGA","NIU","NFK","MNP","NOR","OMN","PAK","PLW","PSE","PAN","PNG","PRY","PER","PHL","PCN","POL","PRT","PRI","QAT","REU","ROU","RUS","RWA","BLM","SHN","KNA","LCA","MAF","SPM","VCT","WSM","SMR","STP","SAU","SEN","SRB","SYC","SLE","SGP","SXM","SVK","SVN","SLB","SOM","ZAF","SGS","SSD","ESP","LKA","SDN","SUR","SJM","SWZ","SWE","CHE","SYR","TWN","TJK","TZA","THA","TLS","TGO","TKL","TON","TTO","TUN","TUR","TKM","TCA","TUV","UGA","UKR","ARE","GBR","USA","UMI","URY","UZB","VUT","VEN","VNM","VGB","VIR","WLF","ESH","YEM","ZMB","ZWE"];var Ct=/[^A-Z0-9+\/=]/i;var Lt=/^[a-z]+\/[a-z0-9\-\+]+$/i,It=/^[a-z\-]+=[a-z0-9\-]+$/i,Zt=/^[a-z0-9!\$&'\(\)\*\+,;=\-\._~:@\/\?%\s]*$/i;var Tt=/^magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32,40}&dn=.+&tr=.+$/i;var Bt=/^(application|audio|font|image|message|model|multipart|text|video)\/[a-zA-Z0-9\.\-\+]{1,100}$/i,yt=/^text\/[a-zA-Z0-9\.\-\+]{1,100};\s?charset=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?$/i,bt=/^multipart\/[a-zA-Z0-9\.\-\+]{1,100}(;\s?(boundary|charset)=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?){0,2}$/i;var Dt=/^\(?[+-]?(90(\.0+)?|[1-8]?\d(\.\d+)?)$/,Ot=/^\s?[+-]?(180(\.0+)?|1[0-7]\d(\.\d+)?|\d{1,2}(\.\d+)?)\)?$/,Gt=/^\d{4}$/,Pt=/^\d{5}$/,Ut=/^\d{6}$/,kt={AD:/^AD\d{3}$/,AT:Gt,AU:Gt,BE:Gt,BG:Gt,CA:/^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][\s\-]?\d[ABCEGHJ-NPRSTV-Z]\d$/i,CH:Gt,CZ:/^\d{3}\s?\d{2}$/,DE:Pt,DK:Gt,DZ:Pt,EE:Pt,ES:Pt,FI:Pt,FR:/^\d{2}\s?\d{3}$/,GB:/^(gir\s?0aa|[a-z]{1,2}\d[\da-z]?\s?(\d[a-z]{2})?)$/i,GR:/^\d{3}\s?\d{2}$/,HR:/^([1-5]\d{4}$)/,HU:Gt,IL:Pt,IN:Ut,IS:/^\d{3}$/,IT:Pt,JP:/^\d{3}\-\d{4}$/,KE:Pt,LI:/^(948[5-9]|949[0-7])$/,LT:/^LT\-\d{5}$/,LU:Gt,LV:/^LV\-\d{4}$/,MX:Pt,NL:/^\d{4}\s?[a-z]{2}$/i,NO:Gt,PL:/^\d{2}\-\d{3}$/,PT:/^\d{4}\-\d{3}?$/,RO:Ut,RU:Ut,SA:Pt,SE:/^\d{3}\s?\d{2}$/,SI:Gt,SK:/^\d{3}\s?\d{2}$/,TN:Gt,TW:/^\d{3}(\d{2})?$/,US:/^\d{5}(-\d{4})?$/,ZA:Gt,ZM:Pt},Kt=Object.keys(kt);function Ht(t,e){g(t);var r=e?new RegExp("^[".concat(e,"]+"),"g"):/^\s+/g;return t.replace(r,"")}function zt(t,e){g(t);for(var r=e?new RegExp("[".concat(e,"]")):/\s/,o=t.length-1;0<=o&&r.test(t[o]);o--);return o]/.test(t))return!1;if(0===t.indexOf("mailto:"))return!1;var r,o,n,i,a,l,s,u;if(e=h(e,d),1<(s=(t=(s=(t=(s=t.split("#")).shift()).split("?")).shift()).split("://")).length){if(r=s.shift().toLowerCase(),e.require_valid_protocol&&-1===e.protocols.indexOf(r))return!1}else{if(e.require_protocol)return!1;if("//"===t.substr(0,2)){if(!e.allow_protocol_relative_urls)return!1;s[0]=t.substr(2)}}if(""===(t=s.join("://")))return!1;if(""===(t=(s=t.split("/")).shift())&&!e.require_host)return!0;if(1<(s=t.split("@")).length){if(e.disallow_auth)return!1;if(0<=(o=s.shift()).indexOf(":")&&2=e.min)&&(!e.hasOwnProperty("max")||o<=e.max)&&(!e.hasOwnProperty("lt")||oe.gt)},isFloatLocales:J,isDecimal:function(t,e){if(g(t),(e=h(e,Q)).locale in C)return!q(X,t.replace(/ /g,""))&&(r=e,new RegExp("^[-+]?([0-9]+)?(\\".concat(C[r.locale],"[0-9]{").concat(r.decimal_digits,"})").concat(r.force_decimal?"":"?","$"))).test(t);var r;throw new Error("Invalid locale '".concat(e.locale,"'"))},isHexadecimal:et,isDivisibleBy:function(t,e){return g(t),r(t)%parseInt(e,10)==0},isHexColor:function(t){return g(t),rt.test(t)},isISRC:function(t){return g(t),ot.test(t)},isMD5:function(t){return g(t),nt.test(t)},isHash:function(t,e){return g(t),new RegExp("^[a-f0-9]{".concat(it[e],"}$")).test(t)},isJWT:function(t){return g(t),at.test(t)},isJSON:function(t){g(t);try{var e=JSON.parse(t);return!!e&&"object"===a(e)}catch(t){}return!1},isEmpty:function(t,e){return g(t),0===((e=h(e,lt)).ignore_whitespace?t.trim().length:t.length)},isLength:function(t,e){var r,o;g(t),o="object"===a(e)?(r=e.min||0,e.max):(r=e,arguments[2]);var n=t.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g)||[],i=t.length-n.length;return r<=i&&(void 0===o||i<=o)},isByteLength:A,isUUID:function(t){var e=1/g,">").replace(/\//g,"/").replace(/\\/g,"\").replace(/`/g,"`")},unescape:function(t){return g(t),t.replace(/&/g,"&").replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(///g,"/").replace(/\/g,"\\").replace(/`/g,"`")},stripLow:function(t,e){return g(t),Wt(t,e?"\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F":"\\x00-\\x1F\\x7F")},whitelist:function(t,e){return g(t),t.replace(new RegExp("[^".concat(e,"]+"),"g"),"")},blacklist:Wt,isWhitelisted:function(t,e){g(t);for(var r=t.length-1;0<=r;r--)if(-1===e.indexOf(t[r]))return!1;return!0},normalizeEmail:function(t,e){e=h(e,Yt);var r=t.split("@"),o=r.pop(),n=[r.join("@"),o];if(n[1]=n[1].toLowerCase(),"gmail.com"===n[1]||"googlemail.com"===n[1]){if(e.gmail_remove_subaddress&&(n[0]=n[0].split("+")[0]),e.gmail_remove_dots&&(n[0]=n[0].replace(/\.+/g,Qt)),!n[0].length)return!1;(e.all_lowercase||e.gmail_lowercase)&&(n[0]=n[0].toLowerCase()),n[1]=e.gmail_convert_googlemaildotcom?"gmail.com":n[1]}else if(0<=Vt.indexOf(n[1])){if(e.icloud_remove_subaddress&&(n[0]=n[0].split("+")[0]),!n[0].length)return!1;(e.all_lowercase||e.icloud_lowercase)&&(n[0]=n[0].toLowerCase())}else if(0<=jt.indexOf(n[1])){if(e.outlookdotcom_remove_subaddress&&(n[0]=n[0].split("+")[0]),!n[0].length)return!1;(e.all_lowercase||e.outlookdotcom_lowercase)&&(n[0]=n[0].toLowerCase())}else if(0<=Jt.indexOf(n[1])){if(e.yahoo_remove_subaddress){var i=n[0].split("-");n[0]=1