NPM Dependencies UPDATE
This commit is contained in:
1 parent
20c29bb4d6
commit
a9bfe7a413
599 files changed
+12369
-51423
No files matched your search
-3
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"laxcomma": true
|
||||
}
|
||||
-3
@@ -1,3 +0,0 @@
|
||||
.DS_Store
|
||||
node_modules
|
||||
coverage
|
||||
-7
@@ -1,7 +0,0 @@
|
||||
sudo: false
|
||||
language: node_js
|
||||
node_js:
|
||||
- "0.10"
|
||||
- "0.12"
|
||||
after_script:
|
||||
- npm run coveralls
|
||||
+419
@@ -0,0 +1,419 @@
|
||||
#### 9.4.1
|
||||
|
||||
- Patched a [REDOS](https://en.wikipedia.org/wiki/ReDoS) vulnerability in `isDataURI`
|
||||
- New and improved locales
|
||||
([#788](https://github.com/chriso/validator.js/pull/788))
|
||||
|
||||
#### 9.4.0
|
||||
|
||||
- Added an option to `isMobilePhone` to require a country code
|
||||
([#769](https://github.com/chriso/validator.js/pull/769))
|
||||
- New and improved locales
|
||||
([#785](https://github.com/chriso/validator.js/pull/785))
|
||||
|
||||
#### 9.3.0
|
||||
|
||||
- New and improved locales
|
||||
([#763](https://github.com/chriso/validator.js/pull/763),
|
||||
[#768](https://github.com/chriso/validator.js/pull/768),
|
||||
[#774](https://github.com/chriso/validator.js/pull/774),
|
||||
[#777](https://github.com/chriso/validator.js/pull/777),
|
||||
[#779](https://github.com/chriso/validator.js/pull/779))
|
||||
|
||||
#### 9.2.0
|
||||
|
||||
- Added an `isMimeType()` validator
|
||||
([#760](https://github.com/chriso/validator.js/pull/760))
|
||||
- New and improved locales
|
||||
([#753](https://github.com/chriso/validator.js/pull/753),
|
||||
[#755](https://github.com/chriso/validator.js/pull/755),
|
||||
[#764](https://github.com/chriso/validator.js/pull/764))
|
||||
|
||||
#### 9.1.2
|
||||
|
||||
- Fixed a bug with the `isFloat` validator
|
||||
([#752](https://github.com/chriso/validator.js/pull/752))
|
||||
|
||||
#### 9.1.1
|
||||
|
||||
- Locale fixes
|
||||
([#738](https://github.com/chriso/validator.js/pull/738),
|
||||
[#739](https://github.com/chriso/validator.js/pull/739))
|
||||
|
||||
#### 9.1.0
|
||||
|
||||
- Added an `isISO31661Alpha2()` validator
|
||||
([#734](https://github.com/chriso/validator.js/pull/734))
|
||||
- New locales
|
||||
([#735](https://github.com/chriso/validator.js/pull/735),
|
||||
[#737](https://github.com/chriso/validator.js/pull/737))
|
||||
|
||||
#### 9.0.0
|
||||
|
||||
- `normalizeEmail()` no longer validates the email address
|
||||
([#725](https://github.com/chriso/validator.js/pull/725))
|
||||
- Added locale-aware validation to `isFloat()` and `isDecimal()`
|
||||
([#721](https://github.com/chriso/validator.js/pull/721))
|
||||
- Added an `isPort()` validator
|
||||
([#733](https://github.com/chriso/validator.js/pull/733))
|
||||
- New locales
|
||||
([#731](https://github.com/chriso/validator.js/pull/731))
|
||||
|
||||
#### 8.2.0
|
||||
|
||||
- Added an `isHash()` validator
|
||||
([#711](https://github.com/chriso/validator.js/pull/711))
|
||||
- Control decimal places in `isCurrency()`
|
||||
([#713](https://github.com/chriso/validator.js/pull/713))
|
||||
- New and improved locales
|
||||
([#700](https://github.com/chriso/validator.js/pull/700),
|
||||
[#701](https://github.com/chriso/validator.js/pull/701),
|
||||
[#714](https://github.com/chriso/validator.js/pull/714),
|
||||
[#715](https://github.com/chriso/validator.js/pull/715),
|
||||
[#718](https://github.com/chriso/validator.js/pull/718))
|
||||
|
||||
#### 8.1.0
|
||||
|
||||
- Fix `require('validator/lib/isIS8601')` calls
|
||||
([#688](https://github.com/chriso/validator.js/issues/688))
|
||||
- Added an `isLatLong()` and `isPostalCode()` validator
|
||||
([#684](https://github.com/chriso/validator.js/pull/684))
|
||||
- Allow comma in email display names
|
||||
([#692](https://github.com/chriso/validator.js/pull/692))
|
||||
- Add missing string to `unescape()`
|
||||
([#690](https://github.com/chriso/validator.js/pull/690))
|
||||
- Fix `isMobilePhone()` with Node <= 6.x
|
||||
([#681](https://github.com/chriso/validator.js/issues/681))
|
||||
- New locales
|
||||
([#695](https://github.com/chriso/validator.js/pull/695))
|
||||
|
||||
#### 8.0.0
|
||||
|
||||
- `isURL()` now requires the `require_tld: false` option to validate `localhost`
|
||||
([#675](https://github.com/chriso/validator.js/issues/675))
|
||||
- `isURL()` now rejects URLs that are protocol only
|
||||
([#642](https://github.com/chriso/validator.js/issues/642))
|
||||
- Fixed a bug where `isMobilePhone()` would silently return false if the locale was invalid or unsupported
|
||||
([#657](https://github.com/chriso/validator.js/issues/657))
|
||||
|
||||
#### 7.2.0
|
||||
|
||||
- Added an option to validate any phone locale
|
||||
([#663](https://github.com/chriso/validator.js/pull/663))
|
||||
- Fixed a bug in credit card validation
|
||||
([#672](https://github.com/chriso/validator.js/pull/672))
|
||||
- Disallow whitespace, including unicode whitespace, in TLDs
|
||||
([#677](https://github.com/chriso/validator.js/pull/677))
|
||||
- New locales
|
||||
([#673](https://github.com/chriso/validator.js/pull/673),
|
||||
[#676](https://github.com/chriso/validator.js/pull/676))
|
||||
|
||||
#### 7.1.0
|
||||
|
||||
- Added an `isISRC()` validator for [ISRC](https://en.wikipedia.org/wiki/International_Standard_Recording_Code)
|
||||
([#660](https://github.com/chriso/validator.js/pull/660))
|
||||
- Fixed a bug in credit card validation
|
||||
([#670](https://github.com/chriso/validator.js/pull/670))
|
||||
- Reduced the maximum allowed address in `isEmail()` based on
|
||||
[RFC3696 errata](http://www.rfc-editor.org/errata_search.php?rfc=3696&eid=1690)
|
||||
([#655](https://github.com/chriso/validator.js/issues/655))
|
||||
- New locales
|
||||
([#647](https://github.com/chriso/validator.js/pull/647),
|
||||
[#667](https://github.com/chriso/validator.js/pull/667),
|
||||
[#667](https://github.com/chriso/validator.js/pull/667),
|
||||
[#671](https://github.com/chriso/validator.js/pull/671))
|
||||
|
||||
#### 7.0.0
|
||||
|
||||
- Remove `isDate()`
|
||||
|
||||
#### 6.3.0
|
||||
|
||||
- Allow values like `-.01` in `isFloat()`
|
||||
([#618](https://github.com/chriso/validator.js/issues/618))
|
||||
- New locales
|
||||
([#616](https://github.com/chriso/validator.js/pull/616),
|
||||
[#622](https://github.com/chriso/validator.js/pull/622),
|
||||
[#627](https://github.com/chriso/validator.js/pull/627),
|
||||
[#630](https://github.com/chriso/validator.js/pull/630))
|
||||
|
||||
#### 6.2.1
|
||||
|
||||
- Disallow `<` and `>` in URLs
|
||||
([#613](https://github.com/chriso/validator.js/issues/613))
|
||||
- New locales
|
||||
([#610](https://github.com/chriso/validator.js/pull/610))
|
||||
|
||||
#### 6.2.0
|
||||
|
||||
- Added an option to require an email display name
|
||||
([#607](https://github.com/chriso/validator.js/pull/607))
|
||||
- Added support for `lt` and `gt` to `isInt()`
|
||||
([#588](https://github.com/chriso/validator.js/pull/588))
|
||||
- New locales
|
||||
([#601](https://github.com/chriso/validator.js/pull/601))
|
||||
|
||||
#### 6.1.0
|
||||
|
||||
- Added support for greater or less than in `isFloat()`
|
||||
([#544](https://github.com/chriso/validator.js/issues/544))
|
||||
- Added support for ISSN validation via `isISSN()`
|
||||
([#593](https://github.com/chriso/validator.js/pull/593))
|
||||
- Fixed a bug in `normalizeEmail()`
|
||||
([#594](https://github.com/chriso/validator.js/issues/594))
|
||||
- New locales
|
||||
([#585](https://github.com/chriso/validator.js/pull/585))
|
||||
|
||||
#### 6.0.0
|
||||
|
||||
- Renamed `isNull()` to `isEmpty()`
|
||||
([#574](https://github.com/chriso/validator.js/issues/574))
|
||||
- Backslash is now escaped in `escape()`
|
||||
([#516](https://github.com/chriso/validator.js/issues/516))
|
||||
- Improved `normalizeEmail()`
|
||||
([#583](https://github.com/chriso/validator.js/pull/583))
|
||||
- Allow leading zeroes by default in `isInt()`
|
||||
([#532](https://github.com/chriso/validator.js/pull/532))
|
||||
|
||||
#### 5.7.0
|
||||
|
||||
- Added support for IPv6 in `isURL()`
|
||||
([#564](https://github.com/chriso/validator.js/issues/564))
|
||||
- Added support for urls without a host (e.g. `file:///foo.txt`) in `isURL()`
|
||||
([#563](https://github.com/chriso/validator.js/issues/563))
|
||||
- Added support for regular expressions in the `isURL()` host whitelist and blacklist
|
||||
([#562](https://github.com/chriso/validator.js/issues/562))
|
||||
- Added support for MasterCard 2-Series BIN
|
||||
([#576](https://github.com/chriso/validator.js/pull/576))
|
||||
- New locales
|
||||
([#575](https://github.com/chriso/validator.js/pull/575),
|
||||
[#552](https://github.com/chriso/validator.js/issues/552))
|
||||
|
||||
#### 5.6.0
|
||||
|
||||
- Added an `isMD5()` validator
|
||||
([#557](https://github.com/chriso/validator.js/pull/557))
|
||||
- Fixed an exceptional case in `isDate()`
|
||||
([#566](https://github.com/chriso/validator.js/pull/566))
|
||||
- New locales
|
||||
([#559](https://github.com/chriso/validator.js/pull/559),
|
||||
[#568](https://github.com/chriso/validator.js/pull/568),
|
||||
[#571](https://github.com/chriso/validator.js/pull/571),
|
||||
[#573](https://github.com/chriso/validator.js/pull/573))
|
||||
|
||||
#### 5.5.0
|
||||
|
||||
- Fixed a regex denial of service in `trim()` and `rtrim()`
|
||||
([#556](https://github.com/chriso/validator.js/pull/556))
|
||||
- Added an Algerian locale to `isMobilePhone()`
|
||||
([#540](https://github.com/chriso/validator.js/pull/540))
|
||||
- Fixed the Hungarian locale in `isAlpha()` and `isAlphanumeric()`
|
||||
([#541](https://github.com/chriso/validator.js/pull/541))
|
||||
- Added a Polish locale to `isMobilePhone()`
|
||||
([#545](https://github.com/chriso/validator.js/pull/545))
|
||||
|
||||
#### 5.4.0
|
||||
|
||||
- Accept Union Pay credit cards in `isCreditCard()`
|
||||
([#539](https://github.com/chriso/validator.js/pull/539))
|
||||
- Added Danish locale to `isMobilePhone()`
|
||||
([#538](https://github.com/chriso/validator.js/pull/538))
|
||||
- Added Hungarian locales to `isAlpha()`, `isAlphanumeric()` and `isMobilePhone()`
|
||||
([#537](https://github.com/chriso/validator.js/pull/537))
|
||||
|
||||
#### 5.3.0
|
||||
|
||||
- Added an `allow_leading_zeroes` option to `isInt()`
|
||||
([#532](https://github.com/chriso/validator.js/pull/532))
|
||||
- Adjust Chinese mobile phone validation
|
||||
([#523](https://github.com/chriso/validator.js/pull/523))
|
||||
- Added a Canadian locale to `isMobilePhone()`
|
||||
([#524](https://github.com/chriso/validator.js/issues/524))
|
||||
|
||||
#### 5.2.0
|
||||
|
||||
- Added a `isDataURI()` validator
|
||||
([#521](https://github.com/chriso/validator.js/pull/521))
|
||||
- Added Czech locales
|
||||
([#522](https://github.com/chriso/validator.js/pull/522))
|
||||
- Fixed a bug with `isURL()` when protocol was missing and "://" appeared in the query
|
||||
([#518](https://github.com/chriso/validator.js/issues/518))
|
||||
|
||||
#### 5.1.0
|
||||
|
||||
- Added a `unescape()` HTML function
|
||||
([#509](https://github.com/chriso/validator.js/pull/509))
|
||||
- Added a Malaysian locale to `isMobilePhone()`
|
||||
([#507](https://github.com/chriso/validator.js/pull/507))
|
||||
- Added Polish locales to `isAlpha()` and `isAlphanumeric()`
|
||||
([#506](https://github.com/chriso/validator.js/pull/506))
|
||||
- Added Turkish locales to `isAlpha()`, `isAlphanumeric()` and `isMobilePhone()`
|
||||
([#512](https://github.com/chriso/validator.js/pull/512))
|
||||
- Allow >1 underscore in hostnames when using `allow_underscores`
|
||||
([#510](https://github.com/chriso/validator.js/issues/510))
|
||||
|
||||
#### 5.0.0
|
||||
|
||||
- Migrate to ES6
|
||||
([#496](https://github.com/chriso/validator.js/pull/496))
|
||||
- Break the library up so that individual functions can be imported
|
||||
([#496](https://github.com/chriso/validator.js/pull/496))
|
||||
- Remove auto-coercion of input to a string
|
||||
([#496](https://github.com/chriso/validator.js/pull/496))
|
||||
- Remove the `extend()` function
|
||||
([#496](https://github.com/chriso/validator.js/pull/496))
|
||||
- Added Arabic locales to `isAlpha()` and `isAlphanumeric()`
|
||||
([#496](https://github.com/chriso/validator.js/pull/496#issuecomment-184781730))
|
||||
- Fix validation of very large base64 strings
|
||||
([#503](https://github.com/chriso/validator.js/pull/503))
|
||||
|
||||
#### 4.9.0
|
||||
|
||||
- Added a Russian locale to `isAlpha()` and `isAlphanumeric()`
|
||||
([#499](https://github.com/chriso/validator.js/pull/499))
|
||||
- Remove the restriction on adjacent hyphens in hostnames
|
||||
([#500](https://github.com/chriso/validator.js/issues/500))
|
||||
|
||||
#### 4.8.0
|
||||
|
||||
- Added Spanish, French, Portuguese and Dutch support for `isAlpha()` and `isAlphanumeric()`
|
||||
([#492](https://github.com/chriso/validator.js/pull/492))
|
||||
- Added a Brazilian locale to `isMobilePhone()`
|
||||
([#489](https://github.com/chriso/validator.js/pull/489))
|
||||
- Reject IPv4 addresses with invalid zero padding
|
||||
([#490](https://github.com/chriso/validator.js/pull/490))
|
||||
- Fix the client-side version when used with RequireJS
|
||||
([#494](https://github.com/chriso/validator.js/issues/494))
|
||||
|
||||
#### 4.7.1
|
||||
|
||||
- Use [node-depd](https://github.com/dougwilson/nodejs-depd) to print deprecation notices
|
||||
([#487](https://github.com/chriso/validator.js/issues/487))
|
||||
|
||||
#### 4.7.0
|
||||
|
||||
- Print a deprecation warning if validator input is not a string
|
||||
([1f67e1e](https://github.com/chriso/validator.js/commit/1f67e1e15198c0ae735151290dc8dc2bf14da254)).
|
||||
Note that this will be an error in v5.
|
||||
- Added a German locale to `isMobilePhone()`, `isAlpha()` and `isAlphanumeric()`
|
||||
([#477](https://github.com/chriso/validator.js/pull/477))
|
||||
- Added a Finnish locale to `isMobilePhone()`
|
||||
([#455](https://github.com/chriso/validator.js/pull/455))
|
||||
|
||||
#### 4.6.1
|
||||
|
||||
- Fix coercion of objects: `Object.toString()` is `[object Object]` not `""`
|
||||
([a57f3c8](https://github.com/chriso/validator.js/commit/a57f3c843c715fba2664ee22ec80e9e28e88e0a6))
|
||||
|
||||
#### 4.6.0
|
||||
|
||||
- Added a Spanish locale to `isMobilePhone()`
|
||||
([#481](https://github.com/chriso/validator.js/pull/481))
|
||||
- Fix string coercion of objects created with `Object.create(null)`
|
||||
([#484](https://github.com/chriso/validator.js/issues/484))
|
||||
|
||||
#### 4.5.2
|
||||
|
||||
- Fix a timezone issue with short-form ISO 8601 dates, e.g.
|
||||
`validator.isDate('2011-12-21')`
|
||||
([#480](https://github.com/chriso/validator.js/issues/480))
|
||||
|
||||
#### 4.5.1
|
||||
|
||||
- Make `isLength()` / `isByteLength()` accept `{min, max}` as options object.
|
||||
([#474](https://github.com/chriso/validator.js/issues/474))
|
||||
|
||||
#### 4.5.0
|
||||
|
||||
- Add validation for Indian mobile phone numbers
|
||||
([#471](https://github.com/chriso/validator.js/pull/471))
|
||||
- Tweak Greek and Chinese mobile phone validation
|
||||
([#467](https://github.com/chriso/validator.js/pull/467),
|
||||
[#468](https://github.com/chriso/validator.js/pull/468))
|
||||
- Fixed a bug in `isDate()` when validating ISO 8601 dates without a timezone
|
||||
([#472](https://github.com/chriso/validator.js/issues/472))
|
||||
|
||||
#### 4.4.1
|
||||
|
||||
- Allow triple hyphens in IDNA hostnames
|
||||
([#466](https://github.com/chriso/validator.js/issues/466))
|
||||
|
||||
#### 4.4.0
|
||||
|
||||
- Added `isMACAddress()` validator
|
||||
([#458](https://github.com/chriso/validator.js/pull/458))
|
||||
- Added `isWhitelisted()` validator
|
||||
([#462](https://github.com/chriso/validator.js/pull/462))
|
||||
- Added a New Zealand locale to `isMobilePhone()`
|
||||
([#452](https://github.com/chriso/validator.js/pull/452))
|
||||
- Added options to control GMail address normalization
|
||||
([#460](https://github.com/chriso/validator.js/pull/460))
|
||||
|
||||
#### 4.3.0
|
||||
|
||||
- Support Ember CLI module definitions
|
||||
([#448](https://github.com/chriso/validator.js/pull/448))
|
||||
- Added a Vietnam locale to `isMobilePhone()`
|
||||
([#451](https://github.com/chriso/validator.js/pull/451))
|
||||
|
||||
#### 4.2.1
|
||||
|
||||
- Fix `isDate()` handling of RFC2822 timezones
|
||||
([#447](https://github.com/chriso/validator.js/pull/447))
|
||||
|
||||
#### 4.2.0
|
||||
|
||||
- Fix `isDate()` handling of ISO8601 timezones
|
||||
([#444](https://github.com/chriso/validator.js/pull/444))
|
||||
- Fix the incorrect `isFloat('.') === true`
|
||||
([#443](https://github.com/chriso/validator.js/pull/443))
|
||||
- Added a Norwegian locale to `isMobilePhone()`
|
||||
([#439](https://github.com/chriso/validator.js/pull/439))
|
||||
|
||||
#### 4.1.0
|
||||
|
||||
- General `isDate()` improvements
|
||||
([#431](https://github.com/chriso/validator.js/pull/431))
|
||||
- Tests now require node 4.0+
|
||||
([#438](https://github.com/chriso/validator.js/pull/438))
|
||||
|
||||
#### 4.0.6
|
||||
|
||||
- Added a Taiwan locale to `isMobilePhone()`
|
||||
([#432](https://github.com/chriso/validator.js/pull/432))
|
||||
- Fixed a bug in `isBefore()` where it would return `null`
|
||||
([#436](https://github.com/chriso/validator.js/pull/436))
|
||||
|
||||
#### 4.0.5
|
||||
|
||||
- Fixed a denial of service vulnerability in the `isEmail()` regex
|
||||
([#152](https://github.com/chriso/validator.js/issues/152#issuecomment-131874928))
|
||||
|
||||
#### 4.0.4
|
||||
|
||||
- Reverted the leap year validation in `isDate()` as it introduced some regressions
|
||||
([#422](https://github.com/chriso/validator.js/issues/422), [#423](https://github.com/chriso/validator.js/issues/423))
|
||||
|
||||
#### 4.0.3
|
||||
|
||||
- Added leap year validation to `isDate()`
|
||||
([#418](https://github.com/chriso/validator.js/pull/418))
|
||||
|
||||
#### 4.0.2
|
||||
|
||||
- Fixed `isDecimal()` with an empty string
|
||||
([#419](https://github.com/chriso/validator.js/issues/419))
|
||||
|
||||
#### 4.0.1
|
||||
|
||||
- Fixed `isByteLength()` with certain strings
|
||||
([09f0c6d](https://github.com/chriso/validator.js/commit/09f0c6d2321f0c78af6a7de42e91b63955e4c01e))
|
||||
- Put length restrictions on email parts
|
||||
([#258](https://github.com/chriso/validator.js/issues/258#issuecomment-127173612))
|
||||
|
||||
#### 4.0.0
|
||||
|
||||
- Simplified the `isEmail()` regex and fixed some edge cases
|
||||
([#258](https://github.com/chriso/validator.js/issues/258#issuecomment-127173612))
|
||||
- Added ISO 8601 date validation via `isISO8601()`
|
||||
([#373](https://github.com/chriso/validator.js/issues/373))
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
Copyright (c) 2015 Chris O'Hara <cohara87@gmail.com>
|
||||
Copyright (c) 2016 Chris O'Hara <cohara87@gmail.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
|
||||
-35
@@ -1,35 +0,0 @@
|
||||
NPM=./node_modules/.bin
|
||||
|
||||
test: dependencies
|
||||
@node $(NPM)/_mocha \
|
||||
--reporter $(if $(or $(TEST),$(V)),spec,dot) \
|
||||
--slow 600 --timeout 2000 \
|
||||
--grep '$(TEST)'
|
||||
|
||||
lint: dependencies
|
||||
@$(NPM)/jshint --config .jshintrc \
|
||||
validator.js test/*.js
|
||||
|
||||
dependencies: node_modules
|
||||
|
||||
node_modules:
|
||||
@echo "Installing dependencies.."
|
||||
@npm install
|
||||
|
||||
coverage: dependencies
|
||||
@$(NPM)/istanbul cover $(NPM)/_mocha -- --reporter spec
|
||||
@open coverage/lcov-report/validator.js/validator.js.html
|
||||
|
||||
clean:
|
||||
@rm -rf coverage
|
||||
|
||||
distclean: clean
|
||||
@rm -rf node_modules
|
||||
|
||||
min: validator.min.js
|
||||
|
||||
%.min.js: %.js dependencies
|
||||
@$(NPM)/uglifyjs --compress --mangle --comments '/Copyright/' $< > $@
|
||||
|
||||
check: test
|
||||
deps: dependencies
|
||||
+123
-88
@@ -1,19 +1,42 @@
|
||||
# validator.js
|
||||
|
||||
[![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Downloads][downloads-image]][npm-url]
|
||||
[![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Downloads][downloads-image]][npm-url]
|
||||
|
||||
A library of string validators and sanitizers.
|
||||
|
||||
## Strings only
|
||||
|
||||
**This library validates and sanitizes strings only.**
|
||||
|
||||
If you're not sure if your input is a string, coerce it using `input + ''`.
|
||||
Passing anything other than a string is an error.
|
||||
|
||||
## Installation and Usage
|
||||
|
||||
### Server-side usage
|
||||
|
||||
Install the library with `npm install validator`
|
||||
|
||||
#### No ES6
|
||||
|
||||
```javascript
|
||||
var validator = require('validator');
|
||||
|
||||
validator.isEmail('foo@bar.com'); //=> true
|
||||
```
|
||||
|
||||
#### ES6
|
||||
|
||||
```javascript
|
||||
import validator from 'validator';
|
||||
```
|
||||
|
||||
Or, import only a subset of the library:
|
||||
|
||||
```javascript
|
||||
import isEmail from 'validator/lib/isEmail';
|
||||
```
|
||||
|
||||
### Client-side usage
|
||||
|
||||
The library can be loaded either as a standalone script, or through an [AMD][amd]-compatible loader
|
||||
@@ -31,110 +54,125 @@ The library can also be installed through [bower][bower]
|
||||
$ bower install validator-js
|
||||
```
|
||||
|
||||
### Validators
|
||||
## Validators
|
||||
|
||||
- **equals(str, comparison)** - check if the string matches the comparison.
|
||||
- **contains(str, seed)** - check if the string contains the seed.
|
||||
- **matches(str, pattern [, modifiers])** - check if string matches the pattern. Either `matches('foo', /foo/i)` or `matches('foo', 'foo', 'i')`.
|
||||
- **isEmail(str [, options])** - check if the string is an email. `options` is an object which defaults to `{ allow_display_name: false, allow_utf8_local_part: true }`. If `allow_display_name` is set to true, the validator will also match `Display Name <email-address>`. If `allow_utf8_local_part` is set to false, the validator will not allow any non-English UTF8 character in email address' local part.
|
||||
- **isURL(str [, options])** - check if the string is an URL. `options` is an object which defaults to `{ protocols: ['http','https','ftp'], require_tld: true, require_protocol: false, allow_underscores: false, host_whitelist: false, host_blacklist: false, allow_trailing_dot: false, allow_protocol_relative_urls: false }`.
|
||||
- **isFQDN(str [, options])** - check if the string is a fully qualified domain name (e.g. domain.com). `options` is an object which defaults to `{ require_tld: true, allow_underscores: false, allow_trailing_dot: false }`.
|
||||
- **isIP(str [, version])** - check if the string is an IP (version 4 or 6).
|
||||
- **isAlpha(str)** - check if the string contains only letters (a-zA-Z).
|
||||
- **isNumeric(str)** - check if the string contains only numbers.
|
||||
- **isAlphanumeric(str)** - check if the string contains only letters and numbers.
|
||||
- **isBase64(str)** - check if a string is base64 encoded.
|
||||
- **isHexadecimal(str)** - check if the string is a hexadecimal number.
|
||||
- **isHexColor(str)** - check if the string is a hexadecimal color.
|
||||
- **isLowercase(str)** - check if the string is lowercase.
|
||||
- **isUppercase(str)** - check if the string is uppercase.
|
||||
- **isInt(str)** - check if the string is an integer.
|
||||
- **isFloat(str)** - check if the string is a float.
|
||||
- **isDivisibleBy(str, number)** - check if the string is a number that's divisible by another.
|
||||
- **isNull(str)** - check if the string is null.
|
||||
- **isLength(str, min [, max])** - check if the string's length falls in a range. Note: this function takes into account surrogate pairs.
|
||||
- **isByteLength(str, min [, max])** - check if the string's length (in bytes) falls in a range.
|
||||
- **isUUID(str [, version])** - check if the string is a UUID (version 3, 4 or 5).
|
||||
- **isDate(str)** - check if the string is a date.
|
||||
- **isAfter(str [, date])** - check if the string is a date that's after the specified date (defaults to now).
|
||||
- **isBefore(str [, date])** - check if the string is a date that's before the specified date.
|
||||
- **isIn(str, values)** - check if the string is in a array of allowed values.
|
||||
- **isCreditCard(str)** - check if the string is a credit card.
|
||||
- **isISIN(str)** - check if the string is an [ISIN][ISIN] (stock/security identifier).
|
||||
- **isISBN(str [, version])** - check if the string is an ISBN (version 10 or 13).
|
||||
- **isMobilePhone(str, locale)** - check if the string is a mobile phone number, (locale is one of `['zh-CN', 'en-ZA', 'en-AU', 'en-HK', 'pt-PT', 'fr-FR', 'el-GR', 'en-GB']`).
|
||||
- **isJSON(str)** - check if the string is valid JSON (note: uses JSON.parse).
|
||||
- **isMultibyte(str)** - check if the string contains one or more multibyte chars.
|
||||
- **isAscii(str)** - check if the string contains ASCII chars only.
|
||||
- **isFullWidth(str)** - check if the string contains any full-width chars.
|
||||
- **isHalfWidth(str)** - check if the string contains any half-width chars.
|
||||
- **isVariableWidth(str)** - check if the string contains a mixture of full and half-width chars.
|
||||
- **isSurrogatePair(str)** - check if the string contains any surrogate pairs chars.
|
||||
- **isMongoId(str)** - check if the string is a valid hex-encoded representation of a [MongoDB ObjectId][mongoid].
|
||||
- **isCurrency(str, options)** - check if the string is a valid currency amount. `options` is an object which defaults to `{symbol: '$', require_symbol: false, allow_space_after_symbol: false, symbol_after_digits: false, allow_negatives: true, parens_for_negatives: false, negative_sign_before_digits: false, negative_sign_after_digits: false, allow_negative_sign_placeholder: false, thousands_separator: ',', decimal_separator: '.', allow_space_after_digits: false }`.
|
||||
Here is a list of the validators currently available.
|
||||
|
||||
### Sanitizers
|
||||
Validator | Description
|
||||
--------------------------------------- | --------------------------------------
|
||||
***contains(str, seed)*** | check if the string contains the seed.
|
||||
**equals(str, comparison)** | check if the string matches the comparison.
|
||||
**isAfter(str [, date])** | check if the string is a date that's after the specified date (defaults to now).
|
||||
**isAlpha(str [, locale])** | check if the string contains only letters (a-zA-Z).<br/><br/>Locale is one of `['ar', 'ar-AE', 'ar-BH', 'ar-DZ', 'ar-EG', 'ar-IQ', 'ar-JO', 'ar-KW', 'ar-LB', 'ar-LY', 'ar-MA', 'ar-QA', 'ar-QM', 'ar-SA', 'ar-SD', 'ar-SY', 'ar-TN', 'ar-YE', 'bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'en-AU', 'en-GB', 'en-HK', 'en-IN', 'en-NZ', 'en-US', 'en-ZA', 'en-ZM', 'es-ES', 'fr-FR', 'hu-HU', 'it-IT', 'nb-NO', 'nl-NL', 'nn-NO', 'pl-PL', 'pt-BR', 'pt-PT', 'ru-RU', 'sk-SK', 'sr-RS', 'sr-RS@latin', 'sv-SE', 'tr-TR', 'uk-UA']`) and defaults to `en-US`.
|
||||
**isAlphanumeric(str [, locale])** | check if the string contains only letters and numbers.<br/><br/>Locale is one of `['ar', 'ar-AE', 'ar-BH', 'ar-DZ', 'ar-EG', 'ar-IQ', 'ar-JO', 'ar-KW', 'ar-LB', 'ar-LY', 'ar-MA', 'ar-QA', 'ar-QM', 'ar-SA', 'ar-SD', 'ar-SY', 'ar-TN', 'ar-YE', 'bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'en-AU', 'en-GB', 'en-HK', 'en-IN', 'en-NZ', 'en-US', 'en-ZA', 'en-ZM', 'es-ES', 'fr-FR', 'hu-HU', 'it-IT', 'nb-NO', 'nl-NL', 'nn-NO', 'pl-PL', 'pt-BR', 'pt-PT', 'ru-RU', 'sk-SK', 'sr-RS', 'sr-RS@latin', 'sv-SE', 'tr-TR', 'uk-UA']`) and defaults to `en-US`.
|
||||
**isAscii(str)** | check if the string contains ASCII chars only.
|
||||
**isBase64(str)** | check if a string is base64 encoded.
|
||||
**isBefore(str [, date])** | check if the string is a date that's before the specified date.
|
||||
**isBoolean(str)** | check if a string is a boolean.
|
||||
**isByteLength(str, options)** | check if the string's length (in UTF-8 bytes) falls in a range.<br/><br/>`options` is an object which defaults to `{min:0, max: undefined}`.
|
||||
**isCreditCard(str)** | check if the string is a credit card.
|
||||
**isCurrency(str, options)** | check if the string is a valid currency amount.<br/><br/>`options` is an object which defaults to `{symbol: '$', require_symbol: false, allow_space_after_symbol: false, symbol_after_digits: false, allow_negatives: true, parens_for_negatives: false, negative_sign_before_digits: false, negative_sign_after_digits: false, allow_negative_sign_placeholder: false, thousands_separator: ',', decimal_separator: '.', allow_decimal: true, require_decimal: false, digits_after_decimal: [2], allow_space_after_digits: false}`.<br/>**Note:** The array `digits_after_decimal` is filled with the exact number of digits allowd not a range, for example a range 1 to 3 will be given as [1, 2, 3].
|
||||
**isDataURI(str)** | check if the string is a [data uri format](https://developer.mozilla.org/en-US/docs/Web/HTTP/data_URIs).
|
||||
**isDecimal(str, options)** | check if the string represents a decimal number, such as 0.1, .3, 1.1, 1.00003, 4.0, etc.<br/><br/>`options` is an object which defaults to `{force_decimal: false, decimal_digits: '1,', locale: 'en-US'}`<br/><br/>`locale` determine the decimal separator and is one of `['ar', 'ar-AE', 'ar-BH', 'ar-DZ', 'ar-EG', 'ar-IQ', 'ar-JO', 'ar-KW', 'ar-LB', 'ar-LY', 'ar-MA', 'ar-QA', 'ar-QM', 'ar-SA', 'ar-SD', 'ar-SY', 'ar-TN', 'ar-YE', 'bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'en-AU', 'en-GB', 'en-HK', 'en-IN', 'en-NZ', 'en-US', 'en-ZA', 'en-ZM', 'es-ES', 'fr-FR', 'hu-HU', 'it-IT', 'nb-NO', 'nl-NL', 'nn-NO', 'pl-PL', 'pt-BR', 'pt-PT', 'ru-RU', 'sr-RS', 'sr-RS@latin', 'sv-SE', 'tr-TR', 'uk-UA']`.<br/>**Note:** `decimal_digits` is given as a range like '1,3', a specific value like '3' or min like '1,'.
|
||||
**isDivisibleBy(str, number)** | check if the string is a number that's divisible by another.
|
||||
**isEmail(str [, options])** | check if the string is an email.<br/><br/>`options` is an object which defaults to `{ allow_display_name: false, require_display_name: false, allow_utf8_local_part: true, require_tld: true }`. If `allow_display_name` is set to true, the validator will also match `Display Name <email-address>`. If `require_display_name` is set to true, the validator will reject strings without the format `Display Name <email-address>`. If `allow_utf8_local_part` is set to false, the validator will not allow any non-English UTF8 character in email address' local part. If `require_tld` is set to false, e-mail addresses without having TLD in their domain will also be matched.
|
||||
**isEmpty(str)** | check if the string has a length of zero.
|
||||
**isFQDN(str [, options])** | check if the string is a fully qualified domain name (e.g. domain.com).<br/><br/>`options` is an object which defaults to `{ require_tld: true, allow_underscores: false, allow_trailing_dot: false }`.
|
||||
**isFloat(str [, options])** | check if the string is a float.<br/><br/>`options` is an object which can contain the keys `min`, `max`, `gt`, and/or `lt` to validate the float is within boundaries (e.g. `{ min: 7.22, max: 9.55 }`) it also has `locale` as an option.<br/><br/>`min` and `max` are equivalent to 'greater or equal' and 'less or equal', respectively while `gt` and `lt` are their strict counterparts.<br/><br/>`locale` determine the decimal separator and is one of `['ar', 'ar-AE', 'ar-BH', 'ar-DZ', 'ar-EG', 'ar-IQ', 'ar-JO', 'ar-KW', 'ar-LB', 'ar-LY', 'ar-MA', 'ar-QA', 'ar-QM', 'ar-SA', 'ar-SD', 'ar-SY', 'ar-TN', 'ar-YE', 'bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'en-AU', 'en-GB', 'en-HK', 'en-IN', 'en-NZ', 'en-US', 'en-ZA', 'en-ZM', 'es-ES', 'fr-FR', 'hu-HU', 'it-IT', 'nb-NO', 'nl-NL', 'nn-NO', 'pl-PL', 'pt-BR', 'pt-PT', 'ru-RU', 'sr-RS', 'sr-RS@latin', 'sv-SE', 'tr-TR', 'uk-UA']`.
|
||||
**isFullWidth(str)** | check if the string contains any full-width chars.
|
||||
**isHalfWidth(str)** | check if the string contains any half-width chars.
|
||||
**isHash(str, algorithm)** | check if the string is a hash of type algorithm.<br/><br/>Algorithm is one of `['md4', 'md5', 'sha1', 'sha256', 'sha384', 'sha512', 'ripemd128', 'ripemd160', 'tiger128', 'tiger160', 'tiger192', 'crc32', 'crc32b']`
|
||||
**isHexColor(str)** | check if the string is a hexadecimal color.
|
||||
**isHexadecimal(str)** | check if the string is a hexadecimal number.
|
||||
**isIP(str [, version])** | check if the string is an IP (version 4 or 6).
|
||||
**isISBN(str [, version])** | check if the string is an ISBN (version 10 or 13).
|
||||
**isISSN(str [, options])** | check if the string is an [ISSN](https://en.wikipedia.org/wiki/International_Standard_Serial_Number).<br/><br/>`options` is an object which defaults to `{ case_sensitive: false, require_hyphen: false }`. If `case_sensitive` is true, ISSNs with a lowercase `'x'` as the check digit are rejected.
|
||||
**isISIN(str)** | check if the string is an [ISIN][ISIN] (stock/security identifier).
|
||||
**isISO8601(str)** | check if the string is a valid [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date.
|
||||
**isISO31661Alpha2(str)** | check if the string is a valid [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) officially assigned country code.
|
||||
**isISRC(str)** | check if the string is a [ISRC](https://en.wikipedia.org/wiki/International_Standard_Recording_Code).
|
||||
**isIn(str, values)** | check if the string is in a array of allowed values.
|
||||
**isInt(str [, options])** | check if the string is an integer.<br/><br/>`options` is an object which can contain the keys `min` and/or `max` to check the integer is within boundaries (e.g. `{ min: 10, max: 99 }`). `options` can also contain the key `allow_leading_zeroes`, which when set to false will disallow integer values with leading zeroes (e.g. `{ allow_leading_zeroes: false }`). Finally, `options` can contain the keys `gt` and/or `lt` which will enforce integers being greater than or less than, respectively, the value provided (e.g. `{gt: 1, lt: 4}` for a number between 1 and 4).
|
||||
**isJSON(str)** | check if the string is valid JSON (note: uses JSON.parse).
|
||||
**isLatLong(str)** | check if the string is a valid latitude-longitude coordinate in the format `lat,long` or `lat, long`.
|
||||
**isLength(str, options)** | check if the string's length falls in a range.<br/><br/>`options` is an object which defaults to `{min:0, max: undefined}`. Note: this function takes into account surrogate pairs.
|
||||
**isLowercase(str)** | check if the string is lowercase.
|
||||
**isMACAddress(str)** | check if the string is a MAC address.
|
||||
**isMD5(str)** | check if the string is a MD5 hash.
|
||||
**isMimeType(str)** | check if the string matches to a valid [MIME type](https://en.wikipedia.org/wiki/Media_type) format
|
||||
**isMobilePhone(str, locale)** | check if the string is a mobile phone number,<br/><br/>(locale is one of `['ar-AE', 'ar-DZ', 'ar-EG', 'ar-JO', 'ar-SA', 'ar-SY', 'be-BY', 'bg-BG', 'cs-CZ', 'de-DE', 'da-DK', 'el-GR', 'en-AU', 'en-CA', 'en-GB', 'en-HK', 'en-IN', 'en-KE', 'en-NG', 'en-NZ', 'en-RW', 'en-SG', 'en-UG', 'en-US', 'en-TZ', 'en-ZA', 'en-ZM', 'en-PK', 'es-ES', 'et-EE', 'fa-IR', 'fi-FI', 'fr-FR', 'he-IL', 'hu-HU', 'it-IT', 'ja-JP', 'kk-KZ', 'ko-KR', 'lt-LT', 'ms-MY', 'nb-NO', 'nn-NO', 'pl-PL', 'pt-PT', 'pt-BR', 'ro-RO', 'ru-RU', 'sk-SK', 'sr-RS', 'th-TH', 'tr-TR', 'uk-UA', 'vi-VN', 'zh-CN', 'zh-HK', 'zh-TW']` OR 'any'. If 'any' is used, function will check if any of the locales match).<br/><br/>`options` is an optional object that can be supplied with the following keys: `strictMode`, if this is set to `true`, the mobile phone number must be supplied with the country code and therefore must start with `+`.
|
||||
**isMongoId(str)** | check if the string is a valid hex-encoded representation of a [MongoDB ObjectId][mongoid].
|
||||
**isMultibyte(str)** | check if the string contains one or more multibyte chars.
|
||||
**isNumeric(str)** | check if the string contains only numbers.
|
||||
**isPort(str)** | check if the string is a valid port number.
|
||||
**isPostalCode(str, locale)** | check if the string is a postal code,<br/><br/>(locale is one of `[ 'AT', 'AU', 'BE', 'BG', 'CA', 'CH', 'CZ', 'DE', 'DK', 'DZ', 'ES', 'FI', 'FR', 'GB', 'GR', 'IL', 'IN', 'IS', 'IT', 'JP', 'KE', 'LI', 'MX', 'NL', 'NO', 'PL', 'PT', 'RO', 'RU', 'SA', 'SE', 'TW', 'US', 'ZA', 'ZM' ]` OR 'any'. If 'any' is used, function will check if any of the locals match).
|
||||
**isSurrogatePair(str)** | check if the string contains any surrogate pairs chars.
|
||||
**isURL(str [, options])** | check if the string is an URL.<br/><br/>`options` is an object which defaults to `{ protocols: ['http','https','ftp'], require_tld: true, require_protocol: false, require_host: true, require_valid_protocol: true, allow_underscores: false, host_whitelist: false, host_blacklist: false, allow_trailing_dot: false, allow_protocol_relative_urls: false }`.
|
||||
**isUUID(str [, version])** | check if the string is a UUID (version 3, 4 or 5).
|
||||
**isUppercase(str)** | check if the string is uppercase.
|
||||
**isVariableWidth(str)** | check if the string contains a mixture of full and half-width chars.
|
||||
**isWhitelisted(str, chars)** | checks characters if they appear in the whitelist.
|
||||
**matches(str, pattern [, modifiers])** | check if string matches the pattern.<br/><br/>Either `matches('foo', /foo/i)` or `matches('foo', 'foo', 'i')`.
|
||||
|
||||
- **toString(input)** - convert the input to a string.
|
||||
- **toDate(input)** - convert the input to a date, or `null` if the input is not a date.
|
||||
- **toFloat(input)** - convert the input to a float, or `NaN` if the input is not a float.
|
||||
- **toInt(input [, radix])** - convert the input to an integer, or `NaN` if the input is not an integer.
|
||||
- **toBoolean(input [, strict])** - convert the input to a boolean. Everything except for `'0'`, `'false'` and `''` returns `true`. In strict mode only `'1'` and `'true'` return `true`.
|
||||
- **trim(input [, chars])** - trim characters (whitespace by default) from both sides of the input.
|
||||
- **ltrim(input [, chars])** - trim characters from the left-side of the input.
|
||||
- **rtrim(input [, chars])** - trim characters from the right-side of the input.
|
||||
- **escape(input)** - replace `<`, `>`, `&`, `'`, `"` and `/` with HTML entities.
|
||||
- **stripLow(input [, keep_new_lines])** - remove characters with a numerical value < 32 and 127, mostly control characters. If `keep_new_lines` is `true`, newline characters are preserved (`\n` and `\r`, hex `0xA` and `0xD`). Unicode-safe in JavaScript.
|
||||
- **whitelist(input, chars)** - remove characters that do not appear in the whitelist. The characters are used in a RegExp and so you will need to escape some chars, e.g. whitelist(input, '\\[\\]').
|
||||
- **blacklist(input, chars)** - remove characters that appear in the blacklist. The characters are used in a RegExp and so you will need to escape some chars, e.g. blacklist(input, '\\[\\]').
|
||||
- **normalizeEmail(email [, options])** - canonicalize an email address. `options` is an object which defaults to `{ lowercase: true }`. With `lowercase` set to `true`, the local part of the email address is lowercased for all domains; the hostname is always lowercased and the local part of the email address is always lowercased for hosts that are known to be case-insensitive (currently only GMail). Normalization follows special rules for known providers: currently, GMail addresses have dots removed in the local part and are stripped of tags (e.g. `some.one+tag@gmail.com` becomes `someone@gmail.com`) and all `@googlemail.com` addresses are normalized to `@gmail.com`.
|
||||
## Sanitizers
|
||||
|
||||
Here is a list of the sanitizers currently available.
|
||||
|
||||
Sanitizer | Description
|
||||
-------------------------------------- | -------------------------------
|
||||
**blacklist(input, chars)** | remove characters that appear in the blacklist. The characters are used in a RegExp and so you will need to escape some chars, e.g. `blacklist(input, '\\[\\]')`.
|
||||
**escape(input)** | replace `<`, `>`, `&`, `'`, `"` and `/` with HTML entities.
|
||||
**unescape(input)** | replaces HTML encoded entities with `<`, `>`, `&`, `'`, `"` and `/`.
|
||||
**ltrim(input [, chars])** | trim characters from the left-side of the input.
|
||||
**normalizeEmail(email [, options])** | canonicalizes an email address. (This doesn't validate that the input is an email, if you want to validate the email use isEmail beforehand)<br/><br/>`options` is an object with the following keys and default values:<br/><ul><li>*all_lowercase: true* - Transforms the local part (before the @ symbol) of all email addresses to lowercase. Please note that this may violate RFC 5321, which gives providers the possibility to treat the local part of email addresses in a case sensitive way (although in practice most - yet not all - providers don't). The domain part of the email address is always lowercased, as it's case insensitive per RFC 1035.</li><li>*gmail_lowercase: true* - GMail addresses are known to be case-insensitive, so this switch allows lowercasing them even when *all_lowercase* is set to false. Please note that when *all_lowercase* is true, GMail addresses are lowercased regardless of the value of this setting.</li><li>*gmail_remove_dots: true*: Removes dots from the local part of the email address, as GMail ignores them (e.g. "john.doe" and "johndoe" are considered equal).</li><li>*gmail_remove_subaddress: true*: Normalizes addresses by removing "sub-addresses", which is the part following a "+" sign (e.g. "foo+bar@gmail.com" becomes "foo@gmail.com").</li><li>*gmail_convert_googlemaildotcom: true*: Converts addresses with domain @googlemail.com to @gmail.com, as they're equivalent.</li><li>*outlookdotcom_lowercase: true* - Outlook.com addresses (including Windows Live and Hotmail) are known to be case-insensitive, so this switch allows lowercasing them even when *all_lowercase* is set to false. Please note that when *all_lowercase* is true, Outlook.com addresses are lowercased regardless of the value of this setting.</li><li>*outlookdotcom_remove_subaddress: true*: Normalizes addresses by removing "sub-addresses", which is the part following a "+" sign (e.g. "foo+bar@outlook.com" becomes "foo@outlook.com").</li><li>*yahoo_lowercase: true* - Yahoo Mail addresses are known to be case-insensitive, so this switch allows lowercasing them even when *all_lowercase* is set to false. Please note that when *all_lowercase* is true, Yahoo Mail addresses are lowercased regardless of the value of this setting.</li><li>*yahoo_remove_subaddress: true*: Normalizes addresses by removing "sub-addresses", which is the part following a "-" sign (e.g. "foo-bar@yahoo.com" becomes "foo@yahoo.com").</li><li>*icloud_lowercase: true* - iCloud addresses (including MobileMe) are known to be case-insensitive, so this switch allows lowercasing them even when *all_lowercase* is set to false. Please note that when *all_lowercase* is true, iCloud addresses are lowercased regardless of the value of this setting.</li><li>*icloud_remove_subaddress: true*: Normalizes addresses by removing "sub-addresses", which is the part following a "+" sign (e.g. "foo+bar@icloud.com" becomes "foo@icloud.com").</li></ul>
|
||||
**rtrim(input [, chars])** | trim characters from the right-side of the input.
|
||||
**stripLow(input [, keep_new_lines])** | remove characters with a numerical value < 32 and 127, mostly control characters. If `keep_new_lines` is `true`, newline characters are preserved (`\n` and `\r`, hex `0xA` and `0xD`). Unicode-safe in JavaScript.
|
||||
**toBoolean(input [, strict])** | convert the input string to a boolean. Everything except for `'0'`, `'false'` and `''` returns `true`. In strict mode only `'1'` and `'true'` return `true`.
|
||||
**toDate(input)** | convert the input string to a date, or `null` if the input is not a date.
|
||||
**toFloat(input)** | convert the input string to a float, or `NaN` if the input is not a float.
|
||||
**toInt(input [, radix])** | convert the input string to an integer, or `NaN` if the input is not an integer.
|
||||
**trim(input [, chars])** | trim characters (whitespace by default) from both sides of the input.
|
||||
**whitelist(input, chars)** | remove characters that do not appear in the whitelist. The characters are used in a RegExp and so you will need to escape some chars, e.g. `whitelist(input, '\\[\\]')`.
|
||||
|
||||
### XSS Sanitization
|
||||
|
||||
XSS sanitization was removed from the library in [2d5d6999](https://github.com/chriso/validator.js/commit/2d5d6999541add350fb396ef02dc42ca3215049e).
|
||||
|
||||
For an alternative, look at Yahoo's [xss-filters library](https://github.com/yahoo/xss-filters).
|
||||
For an alternative, have a look at Yahoo's [xss-filters library](https://github.com/yahoo/xss-filters) or at [DOMPurify](https://github.com/cure53/DOMPurify).
|
||||
|
||||
### Strings only
|
||||
## Contributing
|
||||
|
||||
This library validates and sanitizes **strings** only. All input will be coerced to a string using the following rules
|
||||
In general, we follow the "fork-and-pull" Git workflow.
|
||||
|
||||
- Call the `toString` property if available.
|
||||
- Replace `null`, `undefined` or `NaN` with an empty string.
|
||||
- Everything else is coerced with `input + ''`.
|
||||
1. Fork the repo on GitHub
|
||||
2. Clone the project to your own machine
|
||||
3. Work on your fork
|
||||
1. Make your changes and additions
|
||||
2. Change or add tests if needed
|
||||
3. Run tests and make sure they pass
|
||||
4. Add changes to README.md if needed
|
||||
4. Commit changes to your own branch
|
||||
5. **Make sure** you merge the latest from "upstream" and resolve conflicts if there is any
|
||||
6. Repeat step 3(3) above
|
||||
7. Push your work back up to your fork
|
||||
8. Submit a Pull request so that we can review your changes
|
||||
|
||||
### Extensions
|
||||
## Tests
|
||||
|
||||
You can add your own validators using `validator.extend(name, fn)`
|
||||
Tests are using mocha, to run the tests use:
|
||||
|
||||
```javascript
|
||||
validator.extend('isWhitespace', function (str) {
|
||||
return /^\s+$/.test(str);
|
||||
});
|
||||
```sh
|
||||
$ npm test
|
||||
```
|
||||
|
||||
Note that the first argument will be automatically coerced to a string.
|
||||
## Reading
|
||||
|
||||
```javascript
|
||||
validator.isWhitespace(' \t\r\n');
|
||||
// => true
|
||||
Remember, validating can be troublesome sometimes. See [A list of articles about programming assumptions commonly made that aren't true](https://github.com/jameslk/awesome-falsehoods).
|
||||
|
||||
validator.isWhitespace('foo bar');
|
||||
// => false
|
||||
```
|
||||
|
||||
### Tests
|
||||
|
||||
- `make test` - run the test suite.
|
||||
- `make test V=1` - run the test suite with added verbosity.
|
||||
- `make test TEST=pattern` - run tests that match a pattern.
|
||||
- `make coverage` - run a coverage analysis tool.
|
||||
- `make lint` - run a lint tool.
|
||||
|
||||
### License (MIT)
|
||||
## License (MIT)
|
||||
|
||||
```
|
||||
Copyright (c) 2015 Chris O'Hara <cohara87@gmail.com>
|
||||
Copyright (c) 2017 Chris O'Hara <cohara87@gmail.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
@@ -164,9 +202,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
[travis-url]: https://travis-ci.org/chriso/validator.js
|
||||
[travis-image]: http://img.shields.io/travis/chriso/validator.js.svg
|
||||
|
||||
[coveralls-url]: https://coveralls.io/r/chriso/validator.js
|
||||
[coveralls-image]: http://img.shields.io/coveralls/chriso/validator.js/master.svg
|
||||
|
||||
[amd]: http://requirejs.org/docs/whyamd.html
|
||||
[bower]: http://bower.io/
|
||||
|
||||
|
||||
-18
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"name": "validator-js",
|
||||
"main": "validator.js",
|
||||
"version": "3.11.2",
|
||||
"homepage": "https://github.com/chriso/validator.js",
|
||||
"authors": [
|
||||
"Chris O'Hara <cohara87+gh@gmail.com>"
|
||||
],
|
||||
"description": "String validation and sanitization",
|
||||
"license": "MIT",
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"node_modules",
|
||||
"bower_components",
|
||||
"test",
|
||||
"tests"
|
||||
]
|
||||
}
|
||||
+351
@@ -0,0 +1,351 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
|
||||
var _toDate = require('./lib/toDate');
|
||||
|
||||
var _toDate2 = _interopRequireDefault(_toDate);
|
||||
|
||||
var _toFloat = require('./lib/toFloat');
|
||||
|
||||
var _toFloat2 = _interopRequireDefault(_toFloat);
|
||||
|
||||
var _toInt = require('./lib/toInt');
|
||||
|
||||
var _toInt2 = _interopRequireDefault(_toInt);
|
||||
|
||||
var _toBoolean = require('./lib/toBoolean');
|
||||
|
||||
var _toBoolean2 = _interopRequireDefault(_toBoolean);
|
||||
|
||||
var _equals = require('./lib/equals');
|
||||
|
||||
var _equals2 = _interopRequireDefault(_equals);
|
||||
|
||||
var _contains = require('./lib/contains');
|
||||
|
||||
var _contains2 = _interopRequireDefault(_contains);
|
||||
|
||||
var _matches = require('./lib/matches');
|
||||
|
||||
var _matches2 = _interopRequireDefault(_matches);
|
||||
|
||||
var _isEmail = require('./lib/isEmail');
|
||||
|
||||
var _isEmail2 = _interopRequireDefault(_isEmail);
|
||||
|
||||
var _isURL = require('./lib/isURL');
|
||||
|
||||
var _isURL2 = _interopRequireDefault(_isURL);
|
||||
|
||||
var _isMACAddress = require('./lib/isMACAddress');
|
||||
|
||||
var _isMACAddress2 = _interopRequireDefault(_isMACAddress);
|
||||
|
||||
var _isIP = require('./lib/isIP');
|
||||
|
||||
var _isIP2 = _interopRequireDefault(_isIP);
|
||||
|
||||
var _isFQDN = require('./lib/isFQDN');
|
||||
|
||||
var _isFQDN2 = _interopRequireDefault(_isFQDN);
|
||||
|
||||
var _isBoolean = require('./lib/isBoolean');
|
||||
|
||||
var _isBoolean2 = _interopRequireDefault(_isBoolean);
|
||||
|
||||
var _isAlpha = require('./lib/isAlpha');
|
||||
|
||||
var _isAlpha2 = _interopRequireDefault(_isAlpha);
|
||||
|
||||
var _isAlphanumeric = require('./lib/isAlphanumeric');
|
||||
|
||||
var _isAlphanumeric2 = _interopRequireDefault(_isAlphanumeric);
|
||||
|
||||
var _isNumeric = require('./lib/isNumeric');
|
||||
|
||||
var _isNumeric2 = _interopRequireDefault(_isNumeric);
|
||||
|
||||
var _isPort = require('./lib/isPort');
|
||||
|
||||
var _isPort2 = _interopRequireDefault(_isPort);
|
||||
|
||||
var _isLowercase = require('./lib/isLowercase');
|
||||
|
||||
var _isLowercase2 = _interopRequireDefault(_isLowercase);
|
||||
|
||||
var _isUppercase = require('./lib/isUppercase');
|
||||
|
||||
var _isUppercase2 = _interopRequireDefault(_isUppercase);
|
||||
|
||||
var _isAscii = require('./lib/isAscii');
|
||||
|
||||
var _isAscii2 = _interopRequireDefault(_isAscii);
|
||||
|
||||
var _isFullWidth = require('./lib/isFullWidth');
|
||||
|
||||
var _isFullWidth2 = _interopRequireDefault(_isFullWidth);
|
||||
|
||||
var _isHalfWidth = require('./lib/isHalfWidth');
|
||||
|
||||
var _isHalfWidth2 = _interopRequireDefault(_isHalfWidth);
|
||||
|
||||
var _isVariableWidth = require('./lib/isVariableWidth');
|
||||
|
||||
var _isVariableWidth2 = _interopRequireDefault(_isVariableWidth);
|
||||
|
||||
var _isMultibyte = require('./lib/isMultibyte');
|
||||
|
||||
var _isMultibyte2 = _interopRequireDefault(_isMultibyte);
|
||||
|
||||
var _isSurrogatePair = require('./lib/isSurrogatePair');
|
||||
|
||||
var _isSurrogatePair2 = _interopRequireDefault(_isSurrogatePair);
|
||||
|
||||
var _isInt = require('./lib/isInt');
|
||||
|
||||
var _isInt2 = _interopRequireDefault(_isInt);
|
||||
|
||||
var _isFloat = require('./lib/isFloat');
|
||||
|
||||
var _isFloat2 = _interopRequireDefault(_isFloat);
|
||||
|
||||
var _isDecimal = require('./lib/isDecimal');
|
||||
|
||||
var _isDecimal2 = _interopRequireDefault(_isDecimal);
|
||||
|
||||
var _isHexadecimal = require('./lib/isHexadecimal');
|
||||
|
||||
var _isHexadecimal2 = _interopRequireDefault(_isHexadecimal);
|
||||
|
||||
var _isDivisibleBy = require('./lib/isDivisibleBy');
|
||||
|
||||
var _isDivisibleBy2 = _interopRequireDefault(_isDivisibleBy);
|
||||
|
||||
var _isHexColor = require('./lib/isHexColor');
|
||||
|
||||
var _isHexColor2 = _interopRequireDefault(_isHexColor);
|
||||
|
||||
var _isISRC = require('./lib/isISRC');
|
||||
|
||||
var _isISRC2 = _interopRequireDefault(_isISRC);
|
||||
|
||||
var _isMD = require('./lib/isMD5');
|
||||
|
||||
var _isMD2 = _interopRequireDefault(_isMD);
|
||||
|
||||
var _isHash = require('./lib/isHash');
|
||||
|
||||
var _isHash2 = _interopRequireDefault(_isHash);
|
||||
|
||||
var _isJSON = require('./lib/isJSON');
|
||||
|
||||
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 _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 _isISO31661Alpha = require('./lib/isISO31661Alpha2');
|
||||
|
||||
var _isISO31661Alpha2 = _interopRequireDefault(_isISO31661Alpha);
|
||||
|
||||
var _isBase = require('./lib/isBase64');
|
||||
|
||||
var _isBase2 = _interopRequireDefault(_isBase);
|
||||
|
||||
var _isDataURI = require('./lib/isDataURI');
|
||||
|
||||
var _isDataURI2 = _interopRequireDefault(_isDataURI);
|
||||
|
||||
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 _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
var version = '9.4.1';
|
||||
|
||||
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,
|
||||
isFQDN: _isFQDN2.default,
|
||||
isBoolean: _isBoolean2.default,
|
||||
isAlpha: _isAlpha2.default,
|
||||
isAlphanumeric: _isAlphanumeric2.default,
|
||||
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,
|
||||
isDecimal: _isDecimal2.default,
|
||||
isHexadecimal: _isHexadecimal2.default,
|
||||
isDivisibleBy: _isDivisibleBy2.default,
|
||||
isHexColor: _isHexColor2.default,
|
||||
isISRC: _isISRC2.default,
|
||||
isMD5: _isMD2.default,
|
||||
isHash: _isHash2.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,
|
||||
isISIN: _isISIN2.default,
|
||||
isISBN: _isISBN2.default,
|
||||
isISSN: _isISSN2.default,
|
||||
isMobilePhone: _isMobilePhone2.default,
|
||||
isPostalCode: _isPostalCode2.default,
|
||||
isCurrency: _isCurrency2.default,
|
||||
isISO8601: _isISO2.default,
|
||||
isISO31661Alpha2: _isISO31661Alpha2.default,
|
||||
isBase64: _isBase2.default,
|
||||
isDataURI: _isDataURI2.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
|
||||
};
|
||||
|
||||
exports.default = validator;
|
||||
module.exports = exports['default'];
|
||||
+96
@@ -0,0 +1,96 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
var alpha = exports.alpha = {
|
||||
'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,
|
||||
'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,
|
||||
ar: /^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/
|
||||
};
|
||||
|
||||
var alphanumeric = exports.alphanumeric = {
|
||||
'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,
|
||||
'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,
|
||||
ar: /^[٠١٢٣٤٥٦٧٨٩0-9ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/
|
||||
};
|
||||
|
||||
var decimal = exports.decimal = {
|
||||
'en-US': '.',
|
||||
ar: '٫'
|
||||
};
|
||||
|
||||
var englishLocales = exports.englishLocales = ['AU', 'GB', 'HK', 'IN', 'NZ', 'ZA', 'ZM'];
|
||||
|
||||
for (var locale, i = 0; i < englishLocales.length; i++) {
|
||||
locale = 'en-' + englishLocales[i];
|
||||
alpha[locale] = alpha['en-US'];
|
||||
alphanumeric[locale] = alphanumeric['en-US'];
|
||||
decimal[locale] = decimal['en-US'];
|
||||
}
|
||||
|
||||
// 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'];
|
||||
|
||||
for (var _locale, _i = 0; _i < arabicLocales.length; _i++) {
|
||||
_locale = 'ar-' + arabicLocales[_i];
|
||||
alpha[_locale] = alpha.ar;
|
||||
alphanumeric[_locale] = alphanumeric.ar;
|
||||
decimal[_locale] = decimal.ar;
|
||||
}
|
||||
|
||||
// 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', 'hu-HU', 'nb-NO', 'nn-NO', 'nl-NL', 'pl-Pl', 'pt-PT', 'ru-RU', 'sr-RS@latin', 'sr-RS', 'sv-SE', 'tr-TR', 'uk-UA'];
|
||||
|
||||
for (var _i2 = 0; _i2 < dotDecimal.length; _i2++) {
|
||||
decimal[dotDecimal[_i2]] = decimal['en-US'];
|
||||
}
|
||||
|
||||
for (var _i3 = 0; _i3 < commaDecimal.length; _i3++) {
|
||||
decimal[commaDecimal[_i3]] = ',';
|
||||
}
|
||||
|
||||
alpha['pt-BR'] = alpha['pt-PT'];
|
||||
alphanumeric['pt-BR'] = alphanumeric['pt-PT'];
|
||||
decimal['pt-BR'] = decimal['pt-PT'];
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = blacklist;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_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'), '');
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = contains;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
var _toString = require('./util/toString');
|
||||
|
||||
var _toString2 = _interopRequireDefault(_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;
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = equals;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
function equals(str, comparison) {
|
||||
(0, _assertString2.default)(str);
|
||||
return str === comparison;
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = escape;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
function escape(str) {
|
||||
(0, _assertString2.default)(str);
|
||||
return str.replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, ''').replace(/</g, '<').replace(/>/g, '>').replace(/\//g, '/').replace(/\\/g, '\').replace(/`/g, '`');
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isAfter;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
var _toDate = require('./toDate');
|
||||
|
||||
var _toDate2 = _interopRequireDefault(_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);
|
||||
return !!(original && comparison && original > comparison);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isAlpha;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
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, _assertString2.default)(str);
|
||||
if (locale in _alpha.alpha) {
|
||||
return _alpha.alpha[locale].test(str);
|
||||
}
|
||||
throw new Error('Invalid locale \'' + locale + '\'');
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isAlphanumeric;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
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, _assertString2.default)(str);
|
||||
if (locale in _alpha.alphanumeric) {
|
||||
return _alpha.alphanumeric[locale].test(str);
|
||||
}
|
||||
throw new Error('Invalid locale \'' + locale + '\'');
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isAscii;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
/* eslint-disable no-control-regex */
|
||||
var ascii = /^[\x00-\x7F]+$/;
|
||||
/* eslint-enable no-control-regex */
|
||||
|
||||
function isAscii(str) {
|
||||
(0, _assertString2.default)(str);
|
||||
return ascii.test(str);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isBase64;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
var notBase64 = /[^A-Z0-9+\/=]/i;
|
||||
|
||||
function isBase64(str) {
|
||||
(0, _assertString2.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'];
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isBefore;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
var _toDate = require('./toDate');
|
||||
|
||||
var _toDate2 = _interopRequireDefault(_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);
|
||||
return !!(original && comparison && original < comparison);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isBoolean;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
function isBoolean(str) {
|
||||
(0, _assertString2.default)(str);
|
||||
return ['true', 'false', '1', '0'].indexOf(str) >= 0;
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
'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);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: 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') {
|
||||
min = options.min || 0;
|
||||
max = options.max;
|
||||
} else {
|
||||
// backwards compatibility: isByteLength(str, min [, max])
|
||||
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'];
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isCreditCard;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
/* 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}|62[0-9]{14})$/;
|
||||
/* eslint-enable max-len */
|
||||
|
||||
function isCreditCard(str) {
|
||||
(0, _assertString2.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;
|
||||
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 {
|
||||
sum += tmpNum;
|
||||
}
|
||||
} else {
|
||||
sum += tmpNum;
|
||||
}
|
||||
shouldDouble = !shouldDouble;
|
||||
}
|
||||
return !!(sum % 10 === 0 ? sanitized : false);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isCurrency;
|
||||
|
||||
var _merge = require('./util/merge');
|
||||
|
||||
var _merge2 = _interopRequireDefault(_merge);
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
function currencyRegex(options) {
|
||||
var decimal_digits = '\\d{' + options.digits_after_decimal[0] + '}';
|
||||
options.digits_after_decimal.forEach(function (digit, index) {
|
||||
if (index !== 0) decimal_digits = decimal_digits + '|\\d{' + digit + '}';
|
||||
});
|
||||
var symbol = '(\\' + options.symbol.replace(/\./g, '\\.') + ')' + (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})*',
|
||||
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 : '');
|
||||
|
||||
// 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)
|
||||
if (options.allow_negative_sign_placeholder) {
|
||||
pattern = '( (?!\\-))?' + pattern;
|
||||
} else if (options.allow_space_after_symbol) {
|
||||
pattern = ' ?' + pattern;
|
||||
} else if (options.allow_space_after_digits) {
|
||||
pattern += '( (?!$))?';
|
||||
}
|
||||
|
||||
if (options.symbol_after_digits) {
|
||||
pattern += symbol;
|
||||
} else {
|
||||
pattern = symbol + pattern;
|
||||
}
|
||||
|
||||
if (options.allow_negatives) {
|
||||
if (options.parens_for_negatives) {
|
||||
pattern = '(\\(' + pattern + '\\)|' + 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
|
||||
// it doesn't start with a space or a negative sign followed by a space
|
||||
return new RegExp('^(?!-? )(?=.*\\d)' + pattern + '$');
|
||||
}
|
||||
|
||||
var default_currency_options = {
|
||||
symbol: '$',
|
||||
require_symbol: false,
|
||||
allow_space_after_symbol: false,
|
||||
symbol_after_digits: false,
|
||||
allow_negatives: true,
|
||||
parens_for_negatives: false,
|
||||
negative_sign_before_digits: false,
|
||||
negative_sign_after_digits: false,
|
||||
allow_negative_sign_placeholder: false,
|
||||
thousands_separator: ',',
|
||||
decimal_separator: '.',
|
||||
allow_decimal: true,
|
||||
require_decimal: false,
|
||||
digits_after_decimal: [2],
|
||||
allow_space_after_digits: false
|
||||
};
|
||||
|
||||
function isCurrency(str, options) {
|
||||
(0, _assertString2.default)(str);
|
||||
options = (0, _merge2.default)(options, default_currency_options);
|
||||
return currencyRegex(options).test(str);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isDataURI;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_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);
|
||||
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
|
||||
} 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'];
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isDecimal;
|
||||
|
||||
var _merge = require('./util/merge');
|
||||
|
||||
var _merge2 = _interopRequireDefault(_merge);
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
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 ? '' : '?') + '$');
|
||||
return regExp;
|
||||
}
|
||||
|
||||
var default_decimal_options = {
|
||||
force_decimal: false,
|
||||
decimal_digits: '1,',
|
||||
locale: 'en-US'
|
||||
};
|
||||
|
||||
var blacklist = ['', '-', '+'];
|
||||
|
||||
function isDecimal(str, options) {
|
||||
(0, _assertString2.default)(str);
|
||||
options = (0, _merge2.default)(options, default_decimal_options);
|
||||
if (options.locale in _alpha.decimal) {
|
||||
return !blacklist.includes(str.replace(/ /g, '')) && decimalRegExp(options).test(str);
|
||||
}
|
||||
throw new Error('Invalid locale \'' + options.locale + '\'');
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isDivisibleBy;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
var _toFloat = require('./toFloat');
|
||||
|
||||
var _toFloat2 = _interopRequireDefault(_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;
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+89
@@ -0,0 +1,89 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isEmail;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
var _merge = require('./util/merge');
|
||||
|
||||
var _merge2 = _interopRequireDefault(_merge);
|
||||
|
||||
var _isByteLength = require('./isByteLength');
|
||||
|
||||
var _isByteLength2 = _interopRequireDefault(_isByteLength);
|
||||
|
||||
var _isFQDN = require('./isFQDN');
|
||||
|
||||
var _isFQDN2 = _interopRequireDefault(_isFQDN);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
var default_email_options = {
|
||||
allow_display_name: false,
|
||||
require_display_name: false,
|
||||
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 quotedEmailUser = /^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f]))*$/i;
|
||||
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);
|
||||
|
||||
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) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
var parts = str.split('@');
|
||||
var domain = parts.pop();
|
||||
var user = parts.join('@');
|
||||
|
||||
var lower_domain = domain.toLowerCase();
|
||||
if (lower_domain === 'gmail.com' || lower_domain === 'googlemail.com') {
|
||||
user = user.replace(/\./g, '').toLowerCase();
|
||||
}
|
||||
|
||||
if (!(0, _isByteLength2.default)(user, { max: 64 }) || !(0, _isByteLength2.default)(domain, { max: 254 })) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!(0, _isFQDN2.default)(domain, { require_tld: options.require_tld })) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (user[0] === '"') {
|
||||
user = user.slice(1, user.length - 1);
|
||||
return options.allow_utf8_local_part ? quotedEmailUserUtf8.test(user) : quotedEmailUser.test(user);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isEmpty;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
function isEmpty(str) {
|
||||
(0, _assertString2.default)(str);
|
||||
return str.length === 0;
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isFQDN;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
var _merge = require('./util/merge');
|
||||
|
||||
var _merge2 = _interopRequireDefault(_merge);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
var default_fqdn_options = {
|
||||
require_tld: true,
|
||||
allow_underscores: false,
|
||||
allow_trailing_dot: false
|
||||
};
|
||||
|
||||
function isFQDN(str, options) {
|
||||
(0, _assertString2.default)(str);
|
||||
options = (0, _merge2.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('.');
|
||||
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
|
||||
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
|
||||
if (/[\uff01-\uff5e]/.test(part)) {
|
||||
return false;
|
||||
}
|
||||
if (part[0] === '-' || part[part.length - 1] === '-') {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isFloat;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
var _alpha = require('./alpha');
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
function isFloat(str, options) {
|
||||
(0, _assertString2.default)(str);
|
||||
options = options || {};
|
||||
var float = new RegExp('^(?:[-+])?(?:[0-9]+)?(?:\\' + (options.locale ? _alpha.decimal[options.locale] : '.') + '[0-9]*)?(?:[eE][\\+\\-]?(?:[0-9]+))?$');
|
||||
if (str === '' || str === '.' || str === '-' || str === '+') {
|
||||
return false;
|
||||
}
|
||||
return float.test(str) && (!options.hasOwnProperty('min') || str >= options.min) && (!options.hasOwnProperty('max') || str <= options.max) && (!options.hasOwnProperty('lt') || str < options.lt) && (!options.hasOwnProperty('gt') || str > options.gt);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.fullWidth = undefined;
|
||||
exports.default = isFullWidth;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_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]/;
|
||||
|
||||
function isFullWidth(str) {
|
||||
(0, _assertString2.default)(str);
|
||||
return fullWidth.test(str);
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.halfWidth = undefined;
|
||||
exports.default = isHalfWidth;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_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]/;
|
||||
|
||||
function isHalfWidth(str) {
|
||||
(0, _assertString2.default)(str);
|
||||
return halfWidth.test(str);
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isHash;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
var lengths = {
|
||||
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
|
||||
};
|
||||
|
||||
function isHash(str, algorithm) {
|
||||
(0, _assertString2.default)(str);
|
||||
var hash = new RegExp('^[a-f0-9]{' + lengths[algorithm] + '}$');
|
||||
return hash.test(str);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isHexColor;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_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);
|
||||
return hexcolor.test(str);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isHexadecimal;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
var hexadecimal = /^[0-9A-F]+$/i;
|
||||
|
||||
function isHexadecimal(str) {
|
||||
(0, _assertString2.default)(str);
|
||||
return hexadecimal.test(str);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+81
@@ -0,0 +1,81 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isIP;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
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] : '';
|
||||
|
||||
(0, _assertString2.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;
|
||||
});
|
||||
return parts[3] <= 255;
|
||||
} 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 ::
|
||||
if (str === '::') {
|
||||
return true;
|
||||
} else if (str.substr(0, 2) === '::') {
|
||||
blocks.shift();
|
||||
blocks.shift();
|
||||
foundOmissionBlock = true;
|
||||
} else if (str.substr(str.length - 2) === '::') {
|
||||
blocks.pop();
|
||||
blocks.pop();
|
||||
foundOmissionBlock = true;
|
||||
}
|
||||
|
||||
for (var i = 0; i < blocks.length; ++i) {
|
||||
// test for a :: which can not be at the string start/end
|
||||
// since those cases have been handled above
|
||||
if (blocks[i] === '' && i > 0 && i < blocks.length - 1) {
|
||||
if (foundOmissionBlock) {
|
||||
return false; // multiple :: in address
|
||||
}
|
||||
foundOmissionBlock = true;
|
||||
} 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'];
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isISBN;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
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] : '';
|
||||
|
||||
(0, _assertString2.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;
|
||||
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;
|
||||
}
|
||||
} else if (version === '13') {
|
||||
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'];
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isISIN;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_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);
|
||||
if (!isin.test(str)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
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 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 {
|
||||
sum += tmpNum;
|
||||
}
|
||||
} else {
|
||||
sum += tmpNum;
|
||||
}
|
||||
shouldDouble = !shouldDouble;
|
||||
}
|
||||
|
||||
return parseInt(str.substr(str.length - 1), 10) === (10000 - sum) % 10;
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isISO31661Alpha2;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
// 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) {
|
||||
(0, _assertString2.default)(str);
|
||||
return validISO31661Alpha2CountriesCodes.includes(str.toUpperCase());
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isISO8601;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
/* 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-2])(-?[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 */
|
||||
|
||||
function isISO8601(str) {
|
||||
(0, _assertString2.default)(str);
|
||||
return iso8601.test(str);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isISRC;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
// 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) {
|
||||
(0, _assertString2.default)(str);
|
||||
return isrc.test(str);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isISSN;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
var issn = '^\\d{4}-?\\d{3}[\\dX]$';
|
||||
|
||||
function isISSN(str) {
|
||||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||||
|
||||
(0, _assertString2.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 issnDigits = str.replace('-', '');
|
||||
var position = 8;
|
||||
var checksum = 0;
|
||||
var _iteratorNormalCompletion = true;
|
||||
var _didIteratorError = false;
|
||||
var _iteratorError = undefined;
|
||||
|
||||
try {
|
||||
for (var _iterator = issnDigits[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
||||
var digit = _step.value;
|
||||
|
||||
var digitValue = digit.toUpperCase() === 'X' ? 10 : +digit;
|
||||
checksum += digitValue * position;
|
||||
--position;
|
||||
}
|
||||
} catch (err) {
|
||||
_didIteratorError = true;
|
||||
_iteratorError = err;
|
||||
} finally {
|
||||
try {
|
||||
if (!_iteratorNormalCompletion && _iterator.return) {
|
||||
_iterator.return();
|
||||
}
|
||||
} finally {
|
||||
if (_didIteratorError) {
|
||||
throw _iteratorError;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return checksum % 11 === 0;
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
'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 _toString = require('./util/toString');
|
||||
|
||||
var _toString2 = _interopRequireDefault(_toString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
function isIn(str, options) {
|
||||
(0, _assertString2.default)(str);
|
||||
var i = void 0;
|
||||
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]);
|
||||
}
|
||||
}
|
||||
return array.indexOf(str) >= 0;
|
||||
} else if ((typeof options === 'undefined' ? 'undefined' : _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'];
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isInt;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
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
|
||||
// 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 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'];
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
'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);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
function isJSON(str) {
|
||||
(0, _assertString2.default)(str);
|
||||
try {
|
||||
var obj = JSON.parse(str);
|
||||
return !!obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object';
|
||||
} catch (e) {/* ignore */}
|
||||
return false;
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
|
||||
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);
|
||||
|
||||
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'];
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
'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);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: 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') {
|
||||
min = options.min || 0;
|
||||
max = options.max;
|
||||
} else {
|
||||
// backwards compatibility: isLength(str, min [, max])
|
||||
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'];
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isLowercase;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
function isLowercase(str) {
|
||||
(0, _assertString2.default)(str);
|
||||
return str === str.toLowerCase();
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isMACAddress;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
var macAddress = /^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$/;
|
||||
|
||||
function isMACAddress(str) {
|
||||
(0, _assertString2.default)(str);
|
||||
return macAddress.test(str);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isMD5;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
var md5 = /^[a-f0-9]{32}$/;
|
||||
|
||||
function isMD5(str) {
|
||||
(0, _assertString2.default)(str);
|
||||
return md5.test(str);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isMimeType;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
/*
|
||||
Checks if the provided string matches to a correct Media type format (MIME type)
|
||||
|
||||
This function only checks is the string format follows the
|
||||
etablished rules by the according RFC specifications.
|
||||
This function supports 'charset' in textual media types
|
||||
(https://tools.ietf.org/html/rfc6657).
|
||||
|
||||
This function does not check against all the media types listed
|
||||
by the IANA (https://www.iana.org/assignments/media-types/media-types.xhtml)
|
||||
because of lightness purposes : it would require to include
|
||||
all these MIME types in this librairy, which would weigh it
|
||||
significantly. This kind of effort maybe is not worth for the use that
|
||||
this function has in this entire librairy.
|
||||
|
||||
More informations in the RFC specifications :
|
||||
- https://tools.ietf.org/html/rfc2045
|
||||
- https://tools.ietf.org/html/rfc2046
|
||||
- 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
|
||||
|
||||
// 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);
|
||||
return mimeTypeSimple.test(str) || mimeTypeText.test(str) || mimeTypeMultipart.test(str);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+103
@@ -0,0 +1,103 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isMobilePhone;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
/* eslint-disable max-len */
|
||||
var phones = {
|
||||
'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-JO': /^(\+?962|0)?7[789]\d{7}$/,
|
||||
'ar-SA': /^(!?(\+?966)|0)?5\d{8}$/,
|
||||
'ar-SY': /^(!?(\+?963)|0)?9\d{8}$/,
|
||||
'be-BY': /^(\+?375)?(24|25|29|33|44)\d{7}$/,
|
||||
'bg-BG': /^(\+?359|0)?8[789]\d{7}$/,
|
||||
'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)2\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]\d{2}[2-9](?!11)\d{6}$/,
|
||||
'en-ZA': /^(\+?27|0)\d{9}$/,
|
||||
'en-ZM': /^(\+?26)?09[567]\d{7}$/,
|
||||
'es-ES': /^(\+?34)?(6\d{1}|7[1234])\d{7}$/,
|
||||
'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[1-9])[\s|\d]+$/,
|
||||
'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': /^(\+?55|0)\-?[1-9]{2}\-?[2-9]{1}\d{3,4}\-?\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}$/,
|
||||
'sk-SK': /^(\+?421)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,
|
||||
'sr-RS': /^(\+3816|06)[- \d]{5,9}$/,
|
||||
'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)?((1(2([0-9])|6([2-9])|88|99))|(9((?!5)[0-9])))([0-9]{7})$/,
|
||||
'zh-CN': /^(\+?0?86\-?)?1[3456789]\d{9}$/,
|
||||
'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);
|
||||
if (options && options.strictMode && !str.startsWith('+')) {
|
||||
return false;
|
||||
}
|
||||
if (locale in phones) {
|
||||
return phones[locale].test(str);
|
||||
} else if (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 + '\'');
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isMongoId;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
var _isHexadecimal = require('./isHexadecimal');
|
||||
|
||||
var _isHexadecimal2 = _interopRequireDefault(_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;
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isMultibyte;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
/* eslint-disable no-control-regex */
|
||||
var multibyte = /[^\x00-\x7F]/;
|
||||
/* eslint-enable no-control-regex */
|
||||
|
||||
function isMultibyte(str) {
|
||||
(0, _assertString2.default)(str);
|
||||
return multibyte.test(str);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isNumeric;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
var numeric = /^[-+]?[0-9]+$/;
|
||||
|
||||
function isNumeric(str) {
|
||||
(0, _assertString2.default)(str);
|
||||
return numeric.test(str);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isPort;
|
||||
|
||||
var _isInt = require('./isInt');
|
||||
|
||||
var _isInt2 = _interopRequireDefault(_isInt);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
function isPort(str) {
|
||||
return (0, _isInt2.default)(str, { min: 0, max: 65535 });
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.locales = undefined;
|
||||
|
||||
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);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
// common patterns
|
||||
var threeDigit = /^\d{3}$/;
|
||||
var fourDigit = /^\d{4}$/;
|
||||
var fiveDigit = /^\d{5}$/;
|
||||
var sixDigit = /^\d{6}$/;
|
||||
|
||||
var patterns = {
|
||||
AT: fourDigit,
|
||||
AU: fourDigit,
|
||||
BE: fourDigit,
|
||||
BG: fourDigit,
|
||||
CA: /^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][\s\-]?\d[ABCEGHJ-NPRSTV-Z]\d$/i,
|
||||
CH: fourDigit,
|
||||
CZ: /^\d{3}\s?\d{2}$/,
|
||||
DE: fiveDigit,
|
||||
DK: fourDigit,
|
||||
DZ: fiveDigit,
|
||||
ES: fiveDigit,
|
||||
FI: fiveDigit,
|
||||
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}$/,
|
||||
IL: fiveDigit,
|
||||
IN: sixDigit,
|
||||
IS: threeDigit,
|
||||
IT: fiveDigit,
|
||||
JP: /^\d{3}\-\d{4}$/,
|
||||
KE: fiveDigit,
|
||||
LI: /^(948[5-9]|949[0-7])$/,
|
||||
MX: fiveDigit,
|
||||
NL: /^\d{4}\s?[a-z]{2}$/i,
|
||||
NO: fourDigit,
|
||||
PL: /^\d{2}\-\d{3}$/,
|
||||
PT: /^\d{4}\-\d{3}?$/,
|
||||
RO: sixDigit,
|
||||
RU: sixDigit,
|
||||
SA: fiveDigit,
|
||||
SE: /^\d{3}\s?\d{2}$/,
|
||||
TW: /^\d{3}(\d{2})?$/,
|
||||
US: /^\d{5}(-\d{4})?$/,
|
||||
ZA: fourDigit,
|
||||
ZM: fiveDigit
|
||||
};
|
||||
|
||||
var locales = exports.locales = Object.keys(patterns);
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isSurrogatePair;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
var surrogatePair = /[\uD800-\uDBFF][\uDC00-\uDFFF]/;
|
||||
|
||||
function isSurrogatePair(str) {
|
||||
(0, _assertString2.default)(str);
|
||||
return surrogatePair.test(str);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+147
@@ -0,0 +1,147 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isURL;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
var _isFQDN = require('./isFQDN');
|
||||
|
||||
var _isFQDN2 = _interopRequireDefault(_isFQDN);
|
||||
|
||||
var _isIP = require('./isIP');
|
||||
|
||||
var _isIP2 = _interopRequireDefault(_isIP);
|
||||
|
||||
var _merge = require('./util/merge');
|
||||
|
||||
var _merge2 = _interopRequireDefault(_merge);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
var default_url_options = {
|
||||
protocols: ['http', 'https', 'ftp'],
|
||||
require_tld: true,
|
||||
require_protocol: false,
|
||||
require_host: true,
|
||||
require_valid_protocol: true,
|
||||
allow_underscores: false,
|
||||
allow_trailing_dot: false,
|
||||
allow_protocol_relative_urls: false
|
||||
};
|
||||
|
||||
var wrapped_ipv6 = /^\[([^\]]+)\](?::([0-9]+))?$/;
|
||||
|
||||
function isRegExp(obj) {
|
||||
return Object.prototype.toString.call(obj) === '[object RegExp]';
|
||||
}
|
||||
|
||||
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);
|
||||
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;
|
||||
|
||||
split = url.split('#');
|
||||
url = split.shift();
|
||||
|
||||
split = url.split('?');
|
||||
url = split.shift();
|
||||
|
||||
split = url.split('://');
|
||||
if (split.length > 1) {
|
||||
protocol = split.shift();
|
||||
if (options.require_valid_protocol && options.protocols.indexOf(protocol) === -1) {
|
||||
return false;
|
||||
}
|
||||
} else if (options.require_protocol) {
|
||||
return false;
|
||||
} else if (options.allow_protocol_relative_urls && url.substr(0, 2) === '//') {
|
||||
split[0] = url.substr(2);
|
||||
}
|
||||
url = split.join('://');
|
||||
|
||||
if (url === '') {
|
||||
return false;
|
||||
}
|
||||
|
||||
split = url.split('/');
|
||||
url = split.shift();
|
||||
|
||||
if (url === '' && !options.require_host) {
|
||||
return true;
|
||||
}
|
||||
|
||||
split = url.split('@');
|
||||
if (split.length > 1) {
|
||||
auth = split.shift();
|
||||
if (auth.indexOf(':') >= 0 && auth.split(':').length > 2) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
hostname = split.join('@');
|
||||
|
||||
port_str = null;
|
||||
ipv6 = null;
|
||||
var ipv6_match = hostname.match(wrapped_ipv6);
|
||||
if (ipv6_match) {
|
||||
host = '';
|
||||
ipv6 = ipv6_match[1];
|
||||
port_str = ipv6_match[2] || null;
|
||||
} else {
|
||||
split = hostname.split(':');
|
||||
host = split.shift();
|
||||
if (split.length) {
|
||||
port_str = split.join(':');
|
||||
}
|
||||
}
|
||||
|
||||
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))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
host = host || ipv6;
|
||||
|
||||
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'];
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isUUID;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
var uuid = {
|
||||
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
|
||||
};
|
||||
|
||||
function isUUID(str) {
|
||||
var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'all';
|
||||
|
||||
(0, _assertString2.default)(str);
|
||||
var pattern = uuid[version];
|
||||
return pattern && pattern.test(str);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isUppercase;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
function isUppercase(str) {
|
||||
(0, _assertString2.default)(str);
|
||||
return str === str.toUpperCase();
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isVariableWidth;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
var _isFullWidth = require('./isFullWidth');
|
||||
|
||||
var _isHalfWidth = require('./isHalfWidth');
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
function isVariableWidth(str) {
|
||||
(0, _assertString2.default)(str);
|
||||
return _isFullWidth.fullWidth.test(str) && _isHalfWidth.halfWidth.test(str);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isWhitelisted;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
function isWhitelisted(str, chars) {
|
||||
(0, _assertString2.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'];
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = ltrim;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_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;
|
||||
return str.replace(pattern, '');
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = matches;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
function matches(str, pattern, modifiers) {
|
||||
(0, _assertString2.default)(str);
|
||||
if (Object.prototype.toString.call(pattern) !== '[object RegExp]') {
|
||||
pattern = new RegExp(pattern, modifiers);
|
||||
}
|
||||
return pattern.test(str);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+129
@@ -0,0 +1,129 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = normalizeEmail;
|
||||
|
||||
var _merge = require('./util/merge');
|
||||
|
||||
var _merge2 = _interopRequireDefault(_merge);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
var default_normalize_email_options = {
|
||||
// The following options apply to all email addresses
|
||||
// Lowercases the local part of the email address.
|
||||
// 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,
|
||||
// Removes dots from the local part of the email address, as that's ignored by GMail
|
||||
gmail_remove_dots: true,
|
||||
// Removes the subaddress (e.g. "+foo") from the email address
|
||||
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 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 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
|
||||
// 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'];
|
||||
|
||||
function normalizeEmail(email, options) {
|
||||
options = (0, _merge2.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];
|
||||
|
||||
// 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') {
|
||||
// Address is GMail
|
||||
if (options.gmail_remove_subaddress) {
|
||||
parts[0] = parts[0].split('+')[0];
|
||||
}
|
||||
if (options.gmail_remove_dots) {
|
||||
parts[0] = parts[0].replace(/\./g, '');
|
||||
}
|
||||
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])) {
|
||||
// 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();
|
||||
}
|
||||
} else if (~outlookdotcom_domains.indexOf(parts[1])) {
|
||||
// Address is Outlook.com
|
||||
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();
|
||||
}
|
||||
} else if (~yahoo_domains.indexOf(parts[1])) {
|
||||
// Address is Yahoo
|
||||
if (options.yahoo_remove_subaddress) {
|
||||
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();
|
||||
}
|
||||
} else if (options.all_lowercase) {
|
||||
// Any other address
|
||||
parts[0] = parts[0].toLowerCase();
|
||||
}
|
||||
return parts.join('@');
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = rtrim;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_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/;
|
||||
|
||||
var idx = str.length - 1;
|
||||
while (idx >= 0 && pattern.test(str[idx])) {
|
||||
idx--;
|
||||
}
|
||||
|
||||
return idx < str.length ? str.substr(0, idx + 1) : str;
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = stripLow;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
var _blacklist = require('./blacklist');
|
||||
|
||||
var _blacklist2 = _interopRequireDefault(_blacklist);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
function stripLow(str, keep_new_lines) {
|
||||
(0, _assertString2.default)(str);
|
||||
var chars = keep_new_lines ? '\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F' : '\\x00-\\x1F\\x7F';
|
||||
return (0, _blacklist2.default)(str, chars);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = toBoolean;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
function toBoolean(str, strict) {
|
||||
(0, _assertString2.default)(str);
|
||||
if (strict) {
|
||||
return str === '1' || str === 'true';
|
||||
}
|
||||
return str !== '0' && str !== 'false' && str !== '';
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = toDate;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
function toDate(date) {
|
||||
(0, _assertString2.default)(date);
|
||||
date = Date.parse(date);
|
||||
return !isNaN(date) ? new Date(date) : null;
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = toFloat;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
function toFloat(str) {
|
||||
(0, _assertString2.default)(str);
|
||||
return parseFloat(str);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = toInt;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
function toInt(str, radix) {
|
||||
(0, _assertString2.default)(str);
|
||||
return parseInt(str, radix || 10);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = trim;
|
||||
|
||||
var _rtrim = require('./rtrim');
|
||||
|
||||
var _rtrim2 = _interopRequireDefault(_rtrim);
|
||||
|
||||
var _ltrim = require('./ltrim');
|
||||
|
||||
var _ltrim2 = _interopRequireDefault(_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);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = unescape;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_assertString);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
function unescape(str) {
|
||||
(0, _assertString2.default)(str);
|
||||
return str.replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, "'").replace(/</g, '<').replace(/>/g, '>').replace(///g, '/').replace(/\/g, '\\').replace(/`/g, '`');
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = assertString;
|
||||
function assertString(input) {
|
||||
var isString = typeof input === 'string' || input instanceof String;
|
||||
|
||||
if (!isString) {
|
||||
throw new TypeError('This library (validator.js) validates strings only');
|
||||
}
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
'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];
|
||||
|
||||
for (var key in defaults) {
|
||||
if (typeof obj[key] === 'undefined') {
|
||||
obj[key] = defaults[key];
|
||||
}
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
'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 = toString;
|
||||
function toString(input) {
|
||||
if ((typeof input === 'undefined' ? 'undefined' : _typeof(input)) === 'object' && input !== null) {
|
||||
if (typeof input.toString === 'function') {
|
||||
input = input.toString();
|
||||
} else {
|
||||
input = '[object Object]';
|
||||
}
|
||||
} else if (input === null || typeof input === 'undefined' || isNaN(input) && !input.length) {
|
||||
input = '';
|
||||
}
|
||||
return String(input);
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = whitelist;
|
||||
|
||||
var _assertString = require('./util/assertString');
|
||||
|
||||
var _assertString2 = _interopRequireDefault(_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'), '');
|
||||
}
|
||||
module.exports = exports['default'];
|
||||
+59
-65
@@ -1,97 +1,91 @@
|
||||
{
|
||||
"_args": [
|
||||
[
|
||||
"validator@~3.35.0",
|
||||
"c:\\users\\luis\\source\\repos\\AACharly\\node_modules\\azure-storage"
|
||||
]
|
||||
],
|
||||
"_from": "validator@>=3.35.0-0 <3.36.0-0",
|
||||
"_id": "validator@3.35.0",
|
||||
"_inCache": true,
|
||||
"_from": "validator@~9.4.1",
|
||||
"_id": "validator@9.4.1",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-YV5KjzvRmSyJ1ee/Dm5UED0G+1L4GZnLN3w6/T+zZm8scVua4sOhYKWTUrKa0H/tMiJyO9QLHMPN+9mB/aMunA==",
|
||||
"_location": "/validator",
|
||||
"_nodeVersion": "0.12.0",
|
||||
"_npmUser": {
|
||||
"email": "cohara87@gmail.com",
|
||||
"name": "cohara87"
|
||||
},
|
||||
"_npmVersion": "2.7.1",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "validator@~9.4.1",
|
||||
"name": "validator",
|
||||
"raw": "validator@~3.35.0",
|
||||
"rawSpec": "~3.35.0",
|
||||
"scope": null,
|
||||
"spec": ">=3.35.0-0 <3.36.0-0",
|
||||
"type": "range"
|
||||
"escapedName": "validator",
|
||||
"rawSpec": "~9.4.1",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "~9.4.1"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/azure-storage"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/validator/-/validator-3.35.0.tgz",
|
||||
"_shasum": "3f07249402c1fc8fc093c32c6e43d72a79cca1dc",
|
||||
"_shrinkwrap": null,
|
||||
"_spec": "validator@~3.35.0",
|
||||
"_where": "c:\\users\\luis\\source\\repos\\AACharly\\node_modules\\azure-storage",
|
||||
"_resolved": "https://registry.npmjs.org/validator/-/validator-9.4.1.tgz",
|
||||
"_shasum": "abf466d398b561cd243050112c6ff1de6cc12663",
|
||||
"_spec": "validator@~9.4.1",
|
||||
"_where": "C:\\Users\\Luis\\source\\repos\\AACloud\\node_modules\\azure-storage",
|
||||
"author": {
|
||||
"email": "cohara87@gmail.com",
|
||||
"name": "Chris O'Hara"
|
||||
"name": "Chris O'Hara",
|
||||
"email": "cohara87@gmail.com"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "http://github.com/chriso/validator.js/issues"
|
||||
},
|
||||
"dependencies": {},
|
||||
"bundleDependencies": false,
|
||||
"deprecated": false,
|
||||
"description": "String validation and sanitization",
|
||||
"devDependencies": {
|
||||
"contextify": "latest",
|
||||
"coveralls": "latest",
|
||||
"istanbul": "latest",
|
||||
"jshint": "latest",
|
||||
"mocha": "latest",
|
||||
"uglify-js": "latest"
|
||||
},
|
||||
"directories": {},
|
||||
"dist": {
|
||||
"shasum": "3f07249402c1fc8fc093c32c6e43d72a79cca1dc",
|
||||
"tarball": "https://registry.npmjs.org/validator/-/validator-3.35.0.tgz"
|
||||
"babel-cli": "^6.24.0",
|
||||
"babel-plugin-add-module-exports": "^0.2.1",
|
||||
"babel-preset-es2015": "^6.24.0",
|
||||
"babel-preset-es2015-rollup": "^3.0.0",
|
||||
"eslint": "^4.0.0",
|
||||
"eslint-config-airbnb-base": "^11.2.0",
|
||||
"eslint-plugin-import": "^2.3.0",
|
||||
"mocha": "^3.1.2",
|
||||
"rollup": "^0.43.0",
|
||||
"rollup-plugin-babel": "^2.7.1",
|
||||
"uglify-js": "^3.0.19"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.10"
|
||||
},
|
||||
"gitHead": "b2a3d4c06249520d746968317b339d848e97972f",
|
||||
"files": [
|
||||
"index.js",
|
||||
"lib",
|
||||
"README.md",
|
||||
"LICENCE",
|
||||
"validator.js",
|
||||
"validator.min.js"
|
||||
],
|
||||
"homepage": "http://github.com/chriso/validator.js",
|
||||
"installable": true,
|
||||
"keywords": [
|
||||
"assert",
|
||||
"sanitisation",
|
||||
"sanitise",
|
||||
"validator",
|
||||
"validation",
|
||||
"validate",
|
||||
"sanitization",
|
||||
"sanitize",
|
||||
"validate",
|
||||
"validation",
|
||||
"validator"
|
||||
],
|
||||
"licenses": [
|
||||
{
|
||||
"type": "MIT",
|
||||
"url": "http://github.com/chriso/validator.js/raw/master/LICENSE"
|
||||
}
|
||||
],
|
||||
"main": "validator.js",
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "cohara87",
|
||||
"email": "cohara87@gmail.com"
|
||||
}
|
||||
"sanitisation",
|
||||
"sanitise",
|
||||
"assert"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "index.js",
|
||||
"name": "validator",
|
||||
"optionalDependencies": {},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "http://github.com/chriso/validator.js.git"
|
||||
"url": "git+ssh://git@github.com/chriso/validator.js.git"
|
||||
},
|
||||
"scripts": {
|
||||
"coveralls": "istanbul cover _mocha --report lcovonly -- -R spec && cat ./coverage/lcov.info | coveralls && rm -rf ./coverage",
|
||||
"test": "node ./node_modules/.bin/_mocha --reporter spec"
|
||||
"build": "npm run build:browser && npm run build:node",
|
||||
"build:browser": "babel-node build-browser && npm run minify",
|
||||
"build:node": "babel src -d . --presets es2015 --plugins add-module-exports",
|
||||
"clean": "npm run clean:node && npm run clean:browser",
|
||||
"clean:browser": "rm -rf validator*.js",
|
||||
"clean:node": "rm -rf index.js lib",
|
||||
"lint": "eslint src test",
|
||||
"lint:fix": "eslint --fix src test",
|
||||
"minify": "uglifyjs validator.js -o validator.min.js --compress --mangle --comments /Copyright/",
|
||||
"pretest": "npm run lint && npm run build",
|
||||
"test": "mocha --reporter spec"
|
||||
},
|
||||
"version": "3.35.0"
|
||||
"version": "9.4.1"
|
||||
}
|
||||
-26
@@ -1,26 +0,0 @@
|
||||
var assert = require('assert')
|
||||
, validator = require('../validator')
|
||||
, min = require('../validator.min');
|
||||
|
||||
describe('Minified version', function () {
|
||||
|
||||
it('should export the same things as the server-side version', function () {
|
||||
for (var key in validator) {
|
||||
assert.equal(typeof validator[key], typeof min[key], 'Minified version did not export ' + key);
|
||||
}
|
||||
});
|
||||
|
||||
it('should be up to date', function () {
|
||||
assert.equal(min.version, validator.version, 'Minified version mismatch. Run `make min`');
|
||||
});
|
||||
|
||||
it('should validate strings', function () {
|
||||
assert.equal(min.isEmail('foo@bar.com'), true);
|
||||
assert.equal(min.isEmail('foo'), false);
|
||||
});
|
||||
|
||||
it('should sanitize strings', function () {
|
||||
assert.equal(min.toBoolean('1'), true);
|
||||
});
|
||||
|
||||
});
|
||||
-21
@@ -1,21 +0,0 @@
|
||||
var assert = require('assert')
|
||||
, validator = require('../validator');
|
||||
|
||||
describe('Exports', function () {
|
||||
|
||||
it('should export validators', function () {
|
||||
assert.equal(typeof validator.isEmail, 'function');
|
||||
assert.equal(typeof validator.isAlpha, 'function');
|
||||
});
|
||||
|
||||
it('should export sanitizers', function () {
|
||||
assert.equal(typeof validator.toBoolean, 'function');
|
||||
assert.equal(typeof validator.toFloat, 'function');
|
||||
});
|
||||
|
||||
it('should export the version number', function () {
|
||||
assert.equal(validator.version, require('../package.json').version,
|
||||
'Version number mismatch in "package.json" vs. "validator.js"');
|
||||
});
|
||||
|
||||
});
|
||||
-223
@@ -1,223 +0,0 @@
|
||||
var validator = require('../validator')
|
||||
, format = require('util').format;
|
||||
|
||||
function test(options) {
|
||||
var args = options.args || [];
|
||||
args.unshift(null);
|
||||
Object.keys(options.expect).forEach(function (input) {
|
||||
args[0] = input;
|
||||
var result = validator[options.sanitizer].apply(validator, args)
|
||||
, expected = options.expect[input];
|
||||
if (isNaN(result) && !result.length && isNaN(expected)) {
|
||||
return;
|
||||
}
|
||||
if (result !== expected) {
|
||||
var warning = format('validator.%s(%s) returned "%s" but should have returned "%s"',
|
||||
options.sanitizer, args.join(', '), result, expected);
|
||||
throw new Error(warning);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
describe('Sanitizers', function () {
|
||||
|
||||
it('should sanitize boolean strings', function () {
|
||||
test({
|
||||
sanitizer: 'toBoolean'
|
||||
, expect: {
|
||||
'0': false
|
||||
, '': false
|
||||
, '1': true
|
||||
, 'true': true
|
||||
, 'foobar': true
|
||||
, ' ': true
|
||||
}
|
||||
});
|
||||
test({
|
||||
sanitizer: 'toBoolean'
|
||||
, args: [ true ] //strict
|
||||
, expect: {
|
||||
'0': false
|
||||
, '': false
|
||||
, '1': true
|
||||
, 'true': true
|
||||
, 'foobar': false
|
||||
, ' ': false
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it('should trim whitespace', function () {
|
||||
test({
|
||||
sanitizer: 'trim'
|
||||
, expect: { ' \r\n\tfoo \r\n\t ': 'foo' }
|
||||
});
|
||||
test({
|
||||
sanitizer: 'ltrim'
|
||||
, expect: { ' \r\n\tfoo \r\n\t ': 'foo \r\n\t ' }
|
||||
});
|
||||
test({
|
||||
sanitizer: 'rtrim'
|
||||
, expect: { ' \r\n\tfoo \r\n\t ': ' \r\n\tfoo' }
|
||||
});
|
||||
});
|
||||
|
||||
it('should trim custom characters', function () {
|
||||
test({
|
||||
sanitizer: 'trim'
|
||||
, args: [ '01' ]
|
||||
, expect: { '010100201000': '2' }
|
||||
});
|
||||
test({
|
||||
sanitizer: 'ltrim'
|
||||
, args: [ '01' ]
|
||||
, expect: { '010100201000': '201000' }
|
||||
});
|
||||
test({
|
||||
sanitizer: 'rtrim'
|
||||
, args: [ '01' ]
|
||||
, expect: { '010100201000': '0101002' }
|
||||
});
|
||||
});
|
||||
|
||||
it('should convert strings to integers', function () {
|
||||
test({
|
||||
sanitizer: 'toInt'
|
||||
, expect: {
|
||||
'3': 3
|
||||
, ' 3 ': 3
|
||||
, '2.4': 2
|
||||
, 'foo': NaN
|
||||
}
|
||||
});
|
||||
test({
|
||||
sanitizer: 'toInt'
|
||||
, args: [ 16 ]
|
||||
, expect: { 'ff': 255 }
|
||||
});
|
||||
});
|
||||
|
||||
it('should convert strings to floats', function () {
|
||||
test({
|
||||
sanitizer: 'toFloat'
|
||||
, expect: {
|
||||
'2': 2.0
|
||||
, '2.': 2.0
|
||||
, '-2.5': -2.5
|
||||
, '.5': 0.5
|
||||
, 'foo': NaN
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it('should escape HTML', function () {
|
||||
test({
|
||||
sanitizer: 'escape'
|
||||
, expect: {
|
||||
'<script> alert("xss&fun"); </script>': '<script> alert("xss&fun"); </script>'
|
||||
, "<script> alert('xss&fun'); </script>": '<script> alert('xss&fun'); </script>'
|
||||
, 'Backtick: `': 'Backtick: `'
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it('should remove control characters (<32 and 127)', function () {
|
||||
// Check basic functionality
|
||||
test({
|
||||
sanitizer: 'stripLow'
|
||||
, expect: {
|
||||
"foo\x00": "foo"
|
||||
, "\x7Ffoo\x02": "foo"
|
||||
, "\x01\x09": ""
|
||||
, "foo\x0A\x0D": "foo"
|
||||
}
|
||||
});
|
||||
// Unicode safety
|
||||
test({
|
||||
sanitizer: 'stripLow'
|
||||
, expect: {
|
||||
"perch\u00e9": "perch\u00e9"
|
||||
, "\u20ac": "\u20ac"
|
||||
, "\u2206\x0A": "\u2206"
|
||||
, "\ud83d\ude04": "\ud83d\ude04"
|
||||
}
|
||||
});
|
||||
// Preserve newlines
|
||||
test({
|
||||
sanitizer: 'stripLow'
|
||||
, args: [ true ] //keep_new_lines
|
||||
, expect: {
|
||||
"foo\x0A\x0D": "foo\x0A\x0D"
|
||||
, "\x03foo\x0A\x0D": "foo\x0A\x0D"
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
it('should sanitize a string based on a whitelist', function () {
|
||||
test({
|
||||
sanitizer: 'whitelist'
|
||||
, args: [ 'abc' ]
|
||||
, expect: {
|
||||
'abcdef': 'abc'
|
||||
, 'aaaaaaaaaabbbbbbbbbb': 'aaaaaaaaaabbbbbbbbbb'
|
||||
, 'a1b2c3': 'abc'
|
||||
, ' ': ''
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it('should sanitize a string based on a blacklist', function () {
|
||||
test({
|
||||
sanitizer: 'blacklist'
|
||||
, args: [ 'abc' ]
|
||||
, expect: {
|
||||
'abcdef': 'def'
|
||||
, 'aaaaaaaaaabbbbbbbbbb': ''
|
||||
, 'a1b2c3': '123'
|
||||
, ' ': ' '
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it('should normalize an email based on domain', function () {
|
||||
test({
|
||||
sanitizer: 'normalizeEmail'
|
||||
, expect: {
|
||||
'test@me.com': 'test@me.com'
|
||||
, 'some.name@gmail.com': 'somename@gmail.com'
|
||||
, 'some.name@googleMail.com': 'somename@gmail.com'
|
||||
, 'some.name+extension@gmail.com': 'somename@gmail.com'
|
||||
, 'some.Name+extension@GoogleMail.com': 'somename@gmail.com'
|
||||
, 'some.name.middleName+extension@gmail.com': 'somenamemiddlename@gmail.com'
|
||||
, 'some.name.middleName+extension@GoogleMail.com': 'somenamemiddlename@gmail.com'
|
||||
, 'some.name.midd.leNa.me.+extension@gmail.com': 'somenamemiddlename@gmail.com'
|
||||
, 'some.name.midd.leNa.me.+extension@GoogleMail.com': 'somenamemiddlename@gmail.com'
|
||||
, 'some.name+extension@unknown.com': 'some.name+extension@unknown.com'
|
||||
, 'hans@m端ller.com': 'hans@m端ller.com'
|
||||
, 'an invalid email address': false
|
||||
, '': false
|
||||
, '+extension@gmail.com': false
|
||||
// some.name.midd..leNa...me...+extension@GoogleMail.com was removed from test cases because of a bug with validator.isEmail. See issue #258
|
||||
}
|
||||
});
|
||||
test({
|
||||
sanitizer: 'normalizeEmail'
|
||||
, args: [{lowercase: false}]
|
||||
, expect: {
|
||||
'test@me.com': 'test@me.com'
|
||||
, 'hans@m端ller.com': 'hans@m端ller.com'
|
||||
, 'test@ME.COM': 'test@me.com' // Hostname is always lowercased
|
||||
, 'TEST@me.com': 'TEST@me.com'
|
||||
, 'TEST@ME.COM': 'TEST@me.com'
|
||||
, 'blAH@x.com': 'blAH@x.com'
|
||||
|
||||
// Domains that are known for being case-insensitive are always lowercased
|
||||
, 'SOME.name@GMAIL.com': 'somename@gmail.com'
|
||||
, 'SOME.name.middleName+extension@GoogleMail.com': 'somenamemiddlename@gmail.com'
|
||||
, 'SOME.name.midd.leNa.me.+extension@gmail.com': 'somenamemiddlename@gmail.com'
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
-1947
File diff suppressed because it is too large.
Load diff
+1532
-699
File diff suppressed because it is too large.
Load diff
+5
-5
@@ -1,6 +1,6 @@
|
||||
/*!
|
||||
* Copyright (c) 2014 Chris O'Hara <cohara87@gmail.com>
|
||||
*
|
||||
* Copyright (c) 2016 Chris O'Hara <cohara87@gmail.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
@@ -8,10 +8,10 @@
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
@@ -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(t,e){"undefined"!=typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&"object"==typeof define.amd?define(e):this[t]=e()}("validator",function(t){"use strict";function e(t,e){t=t||{};for(var r in e)"undefined"==typeof t[r]&&(t[r]=e[r]);return t}function r(t){var e="(\\"+t.symbol.replace(/\./g,"\\.")+")"+(t.require_symbol?"":"?"),r="-?",n="[1-9]\\d*",i="[1-9]\\d{0,2}(\\"+t.thousands_separator+"\\d{3})*",u=["0",n,i],o="("+u.join("|")+")?",a="(\\"+t.decimal_separator+"\\d{2})?",s=o+a;return t.allow_negatives&&!t.parens_for_negatives&&(t.negative_sign_after_digits?s+=r:t.negative_sign_before_digits&&(s=r+s)),t.allow_negative_sign_placeholder?s="( (?!\\-))?"+s:t.allow_space_after_symbol?s=" ?"+s:t.allow_space_after_digits&&(s+="( (?!$))?"),t.symbol_after_digits?s+=e:s=e+s,t.allow_negatives&&(t.parens_for_negatives?s="(\\("+s+"\\)|"+s+")":t.negative_sign_before_digits||t.negative_sign_after_digits||(s=r+s)),new RegExp("^(?!-? )(?=.*\\d)"+s+"$")}t={version:"3.35.0"};var n=/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e])|(\\[\x01-\x09\x0b\x0c\x0d-\x7f])))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))$/i,i=/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\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]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))$/i,u=/^(?:[a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~\.]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(?:[a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~\.]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|\s)*<(.+)>$/i,o=/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/,a=/^[A-Z]{2}[0-9A-Z]{9}[0-9]$/,s=/^(?:[0-9]{9}X|[0-9]{10})$/,l=/^(?:[0-9]{13})$/,f=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/,c=/^[0-9A-F]{1,4}$/i,F={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},p=/^[A-Z]+$/i,g=/^[0-9A-Z]+$/i,x=/^[-+]?[0-9]+$/,d=/^(?:[-+]?(?:0|[1-9][0-9]*))$/,_=/^(?:[-+]?(?:[0-9]+))?(?:\.[0-9]*)?(?:[eE][\+\-]?(?:[0-9]+))?$/,h=/^[0-9A-F]+$/i,A=/^#?([0-9A-F]{3}|[0-9A-F]{6})$/i,v=/^[\x00-\x7F]+$/,D=/[^\x00-\x7F]/,$=/[^\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/,w=/[\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/,b=/[\uD800-\uDBFF][\uDC00-\uDFFF]/,m=/^(?:[A-Z0-9+\/]{4})*(?:[A-Z0-9+\/]{2}==|[A-Z0-9+\/]{3}=|[A-Z0-9+\/]{4})$/i,y={"zh-CN":/^(\+?0?86\-?)?1[345789]\d{9}$/,"en-ZA":/^(\+?27|0)\d{9}$/,"en-AU":/^(\+?61|0)4\d{8}$/,"en-HK":/^(\+?852\-?)?[569]\d{3}\-?\d{4}$/,"fr-FR":/^(\+?33|0)[67]\d{8}$/,"pt-PT":/^(\+351)?9[1236]\d{7}$/,"el-GR":/^(\+30)?((2\d{9})|(69\d{8}))$/,"en-GB":/^(\+?44|0)7\d{9}$/};t.extend=function(e,r){t[e]=function(){var e=Array.prototype.slice.call(arguments);return e[0]=t.toString(e[0]),r.apply(t,e)}},t.init=function(){for(var e in t)"function"==typeof t[e]&&"toString"!==e&&"toDate"!==e&&"extend"!==e&&"init"!==e&&t.extend(e,t[e])},t.toString=function(t){return"object"==typeof t&&null!==t&&t.toString?t=t.toString():null===t||"undefined"==typeof t||isNaN(t)&&!t.length?t="":"string"!=typeof t&&(t+=""),t},t.toDate=function(t){return"[object Date]"===Object.prototype.toString.call(t)?t:(t=Date.parse(t),isNaN(t)?null:new Date(t))},t.toFloat=function(t){return parseFloat(t)},t.toInt=function(t,e){return parseInt(t,e||10)},t.toBoolean=function(t,e){return e?"1"===t||"true"===t:"0"!==t&&"false"!==t&&""!==t},t.equals=function(e,r){return e===t.toString(r)},t.contains=function(e,r){return e.indexOf(t.toString(r))>=0},t.matches=function(t,e,r){return"[object RegExp]"!==Object.prototype.toString.call(e)&&(e=new RegExp(e,r)),e.test(t)};var E={allow_display_name:!1,allow_utf8_local_part:!0};t.isEmail=function(r,o){if(o=e(o,E),o.allow_display_name){var a=r.match(u);a&&(r=a[1])}else if(/\s/.test(r))return!1;var s=r.split("@"),l=s.pop(),f=s.join("@");return t.isFQDN(l,{require_tld:!1})?o.allow_utf8_local_part?i.test(f):n.test(f):!1};var C={protocols:["http","https","ftp"],require_tld:!0,require_protocol:!1,allow_underscores:!1,allow_trailing_dot:!1,allow_protocol_relative_urls:!1};t.isURL=function(r,n){if(!r||r.length>=2083||/\s/.test(r))return!1;if(0===r.indexOf("mailto:"))return!1;n=e(n,C);var i,u,o,a,s,l,f;if(f=r.split("://"),f.length>1){if(i=f.shift(),-1===n.protocols.indexOf(i))return!1}else{if(n.require_protocol)return!1;n.allow_protocol_Line truncated
|
||||
!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))throw new TypeError("This library (validator.js) validates strings only")}function t(t){return e(t),t=Date.parse(t),isNaN(t)?null:new Date(t)}function r(t){return e(t),parseFloat(t)}var i="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};function o(e){return"object"===(void 0===e?"undefined":i(e))&&null!==e?e="function"==typeof e.toString?e.toString():"[object Object]":(null==e||isNaN(e)&&!e.length)&&(e=""),String(e)}function n(){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 a(t,r){e(t);var o=void 0,n=void 0;"object"===(void 0===r?"undefined":i(r))?(o=r.min||0,n=r.max):(o=arguments[1],n=arguments[2]);var a=encodeURI(t).split(/%..|./).length-1;return a>=o&&(void 0===n||a<=n)}var l={require_tld:!0,allow_underscores:!1,allow_trailing_dot:!1};function s(t,r){e(t),(r=n(r,l)).allow_trailing_dot&&"."===t[t.length-1]&&(t=t.substring(0,t.length-1));var i=t.split(".");if(r.require_tld){var o=i.pop();if(!i.length||!/^([a-z\u00a1-\uffff]{2,}|xn[a-z0-9-]{2,})$/i.test(o))return!1;if(/[\s\u2002-\u200B\u202F\u205F\u3000\uFEFF\uDB40\uDC20]/.test(o))return!1}for(var a,s=0;s<i.length;s++){if(a=i[s],r.allow_underscores&&(a=a.replace(/_/g,"")),!/^[a-z\u00a1-\uffff0-9-]+$/i.test(a))return!1;if(/[\uff01-\uff5e]/.test(a))return!1;if("-"===a[0]||"-"===a[a.length-1])return!1}return!0}var u={allow_display_name:!1,require_display_name:!1,allow_utf8_local_part:!0,require_tld:!0},d=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\,\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\s]*<(.+)>$/i,c=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i,f=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f]))*$/i,g=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$/i,p=/^([\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 h=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/,v=/^[0-9A-F]{1,4}$/i;function m(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(e(t),!(r=String(r)))return m(t,4)||m(t,6);if("4"===r)return!!h.test(t)&&t.split(".").sort(function(e,t){return e-t})[3]<=255;if("6"===r){var i=t.split(":"),o=!1,n=m(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 l=0;l<i.length;++l)if(""===i[l]&&l>0&&l<i.length-1){if(o)return!1;o=!0}else if(n&&l===i.length-1);else if(!v.test(i[l]))return!1;return o?i.length>=1:i.length===a}return!1}var $={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},_=/^\[([^\]]+)\](?::([0-9]+))?$/;function F(e,t){for(var r=0;r<t.length;r++){var i=t[r];if(e===i||(o=i,"[object RegExp]"===Object.prototype.toString.call(o)&&i.test(e)))return!0}var o;return!1}var A=/^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$/;for(var x,S={"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,"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,ar:/^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/},w={"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,"sk-SK":/^[0-9Line truncated
|
||||
Reference in new issue
Block a user