Socket
Socket
Sign inDemoInstall

angular.validators

Package Overview
Dependencies
0
Maintainers
1
Versions
30
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 4.0.7 to 4.2.1

.idea/encodings.xml

1350

angular.validators.js

@@ -125,740 +125,830 @@ 'use strict';

'use strict';
'use strict';
validator = { version: '4.0.2' };
validator = { version: '4.2.1' };
var emailUser = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~])+)*)|"(\s*(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e])|(\\[\x01-\x09\x0b\x0c\x0d-\x7f])))*\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 emailUserUtf8 = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|"(\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]))))*\s*")$/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;
var displayName = /^(?:[a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~\.]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(?:[a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~\.]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|\s)*<(.+)>$/i;
var displayName = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\s]*<(.+)>$/i;
var creditCard = /^(?: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})$/;
var creditCard = /^(?: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})$/;
var isin = /^[A-Z]{2}[0-9A-Z]{9}[0-9]$/;
var isin = /^[A-Z]{2}[0-9A-Z]{9}[0-9]$/;
var isbn10Maybe = /^(?:[0-9]{9}X|[0-9]{10})$/
, isbn13Maybe = /^(?:[0-9]{13})$/;
var isbn10Maybe = /^(?:[0-9]{9}X|[0-9]{10})$/
, isbn13Maybe = /^(?:[0-9]{13})$/;
var ipv4Maybe = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/
, ipv6Block = /^[0-9A-F]{1,4}$/i;
var ipv4Maybe = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/
, ipv6Block = /^[0-9A-F]{1,4}$/i;
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
};
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
};
var alpha = /^[A-Z]+$/i
, alphanumeric = /^[0-9A-Z]+$/i
, numeric = /^[-+]?[0-9]+$/
, int = /^(?:[-+]?(?:0|[1-9][0-9]*))$/
, float = /^(?:[-+]?(?:[0-9]+))?(?:\.[0-9]*)?(?:[eE][\+\-]?(?:[0-9]+))?$/
, hexadecimal = /^[0-9A-F]+$/i
, decimal = /^[-+]?([0-9]+|\.[0-9]+|[0-9]+\.[0-9]+)$/
, hexcolor = /^#?([0-9A-F]{3}|[0-9A-F]{6})$/i;
var alpha = /^[A-Z]+$/i
, alphanumeric = /^[0-9A-Z]+$/i
, numeric = /^[-+]?[0-9]+$/
, int = /^(?:[-+]?(?:0|[1-9][0-9]*))$/
, float = /^(?:[-+]?(?:[0-9]+))?(?:\.[0-9]*)?(?:[eE][\+\-]?(?:[0-9]+))?$/
, hexadecimal = /^[0-9A-F]+$/i
, decimal = /^[-+]?([0-9]+|\.[0-9]+|[0-9]+\.[0-9]+)$/
, hexcolor = /^#?([0-9A-F]{3}|[0-9A-F]{6})$/i;
var ascii = /^[\x00-\x7F]+$/
, multibyte = /[^\x00-\x7F]/
, fullWidth = /[^\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/
, halfWidth = /[\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/;
var ascii = /^[\x00-\x7F]+$/
, multibyte = /[^\x00-\x7F]/
, fullWidth = /[^\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/
, halfWidth = /[\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/;
var surrogatePair = /[\uD800-\uDBFF][\uDC00-\uDFFF]/;
var surrogatePair = /[\uD800-\uDBFF][\uDC00-\uDFFF]/;
var base64 = /^(?:[A-Z0-9+\/]{4})*(?:[A-Z0-9+\/]{2}==|[A-Z0-9+\/]{3}=|[A-Z0-9+\/]{4})$/i;
var base64 = /^(?:[A-Z0-9+\/]{4})*(?:[A-Z0-9+\/]{2}==|[A-Z0-9+\/]{3}=|[A-Z0-9+\/]{4})$/i;
var phones = {
'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}$/,
'en-US': /^(\+?1)?[2-9]\d{2}[2-9](?!11)\d{6}$/,
'en-ZM': /^(\+26)?09[567]\d{7}$/,
'ru-RU': /^(\+?7|8)?9\d{9}$/
};
var phones = {
'zh-CN': /^(\+?0?86\-?)?1[345789]\d{9}$/,
'zh-TW': /^(\+?886\-?|0)?9\d{8}$/,
'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}$/,
'en-US': /^(\+?1)?[2-9]\d{2}[2-9](?!11)\d{6}$/,
'en-ZM': /^(\+26)?09[567]\d{7}$/,
'ru-RU': /^(\+?7|8)?9\d{9}$/,
'nb-NO': /^(\+?47)?[49]\d{7}$/,
'nn-NO': /^(\+?47)?[49]\d{7}$/
};
// 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)?)?)?)?$/;
// 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)?)?)?)?$/;
validator.extend = function (name, fn) {
validator[name] = function () {
var args = Array.prototype.slice.call(arguments);
args[0] = validator.toString(args[0]);
return fn.apply(validator, args);
};
validator.extend = function (name, fn) {
validator[name] = function () {
var args = Array.prototype.slice.call(arguments);
args[0] = validator.toString(args[0]);
return fn.apply(validator, args);
};
};
//Right before exporting the validator object, pass each of the builtins
//through extend() so that their first argument is coerced to a string
validator.init = function () {
for (var name in validator) {
if (typeof validator[name] !== 'function' || name === 'toString' ||
name === 'toDate' || name === 'extend' || name === 'init') {
continue;
}
validator.extend(name, validator[name]);
}
};
//Right before exporting the validator object, pass each of the builtins
//through extend() so that their first argument is coerced to a string
validator.init = function () {
for (var name in validator) {
if (typeof validator[name] !== 'function' || name === 'toString' ||
name === 'toDate' || name === 'extend' || name === 'init') {
continue;
}
validator.extend(name, validator[name]);
}
};
validator.toString = function (input) {
if (typeof input === 'object' && input !== null && input.toString) {
input = input.toString();
} else if (input === null || typeof input === 'undefined' || (isNaN(input) && !input.length)) {
input = '';
} else if (typeof input !== 'string') {
input += '';
}
return input;
};
validator.toString = function (input) {
if (typeof input === 'object' && input !== null && input.toString) {
input = input.toString();
} else if (input === null || typeof input === 'undefined' || (isNaN(input) && !input.length)) {
input = '';
}
return '' + input;
};
validator.toDate = function (date) {
if (Object.prototype.toString.call(date) === '[object Date]') {
return date;
}
date = Date.parse(date);
return !isNaN(date) ? new Date(date) : null;
};
validator.toDate = function (date) {
if (Object.prototype.toString.call(date) === '[object Date]') {
return date;
}
date = Date.parse(date);
return !isNaN(date) ? new Date(date) : null;
};
validator.toFloat = function (str) {
return parseFloat(str);
};
validator.toFloat = function (str) {
return parseFloat(str);
};
validator.toInt = function (str, radix) {
return parseInt(str, radix || 10);
};
validator.toInt = function (str, radix) {
return parseInt(str, radix || 10);
};
validator.toBoolean = function (str, strict) {
if (strict) {
return str === '1' || str === 'true';
}
return str !== '0' && str !== 'false' && str !== '';
};
validator.toBoolean = function (str, strict) {
if (strict) {
return str === '1' || str === 'true';
}
return str !== '0' && str !== 'false' && str !== '';
};
validator.equals = function (str, comparison) {
return str === validator.toString(comparison);
};
validator.equals = function (str, comparison) {
return str === validator.toString(comparison);
};
validator.contains = function (str, elem) {
return str.indexOf(validator.toString(elem)) >= 0;
};
validator.contains = function (str, elem) {
return str.indexOf(validator.toString(elem)) >= 0;
};
validator.matches = function (str, pattern, modifiers) {
if (Object.prototype.toString.call(pattern) !== '[object RegExp]') {
pattern = new RegExp(pattern, modifiers);
}
return pattern.test(str);
};
validator.matches = function (str, pattern, modifiers) {
if (Object.prototype.toString.call(pattern) !== '[object RegExp]') {
pattern = new RegExp(pattern, modifiers);
}
return pattern.test(str);
};
var default_email_options = {
allow_display_name: false,
allow_utf8_local_part: true,
require_tld: true
};
var default_email_options = {
allow_display_name: false,
allow_utf8_local_part: true,
require_tld: true
};
validator.isEmail = function (str, options) {
options = merge(options, default_email_options);
validator.isEmail = function (str, options) {
options = merge(options, default_email_options);
if (options.allow_display_name) {
var display_email = str.match(displayName);
if (display_email) {
str = display_email[1];
}
}
if (options.allow_display_name) {
var display_email = str.match(displayName);
if (display_email) {
str = display_email[1];
}
}
var parts = str.split('@')
, domain = parts.pop()
, user = parts.join('@');
var parts = str.split('@')
, domain = parts.pop()
, user = parts.join('@');
var lower_domain = domain.toLowerCase();
if (lower_domain === 'gmail.com' || lower_domain === 'googlemail.com') {
user = user.replace(/\./g, '').toLowerCase();
}
var lower_domain = domain.toLowerCase();
if (lower_domain === 'gmail.com' || lower_domain === 'googlemail.com') {
user = user.replace(/\./g, '').toLowerCase();
}
if (!validator.isByteLength(user, 0, 64) ||
!validator.isByteLength(domain, 0, 256)) {
return false;
}
if (!validator.isByteLength(user, 0, 64) ||
!validator.isByteLength(domain, 0, 256)) {
return false;
}
if (!validator.isFQDN(domain, {require_tld: options.require_tld})) {
return false;
}
if (!validator.isFQDN(domain, {require_tld: options.require_tld})) {
return false;
}
return options.allow_utf8_local_part ?
emailUserUtf8.test(user) :
emailUser.test(user);
};
if (user[0] === '"') {
user = user.slice(1, user.length - 1);
return options.allow_utf8_local_part ?
quotedEmailUserUtf8.test(user) :
quotedEmailUser.test(user);
}
var default_url_options = {
protocols: [ 'http', 'https', 'ftp' ]
, require_tld: true
, require_protocol: false
, require_valid_protocol: true
, allow_underscores: false
, allow_trailing_dot: false
, allow_protocol_relative_urls: false
};
var pattern = options.allow_utf8_local_part ?
emailUserUtf8Part : emailUserPart;
validator.isURL = function (url, options) {
if (!url || url.length >= 2083 || /\s/.test(url)) {
return false;
}
if (url.indexOf('mailto:') === 0) {
return false;
}
options = merge(options, default_url_options);
var protocol, auth, host, hostname, port,
port_str, split;
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('://');
split = url.split('#');
url = split.shift();
var user_parts = user.split('.');
for (var i = 0; i < user_parts.length; i++) {
if (!pattern.test(user_parts[i])) {
return false;
}
}
split = url.split('?');
url = split.shift();
return true;
};
split = url.split('/');
url = split.shift();
split = url.split('@');
if (split.length > 1) {
auth = split.shift();
if (auth.indexOf(':') >= 0 && auth.split(':').length > 2) {
return false;
}
}
hostname = split.join('@');
split = hostname.split(':');
host = split.shift();
if (split.length) {
port_str = split.join(':');
port = parseInt(port_str, 10);
if (!/^[0-9]+$/.test(port_str) || port <= 0 || port > 65535) {
return false;
}
}
if (!validator.isIP(host) && !validator.isFQDN(host, options) &&
host !== 'localhost') {
return false;
}
if (options.host_whitelist &&
options.host_whitelist.indexOf(host) === -1) {
return false;
}
if (options.host_blacklist &&
options.host_blacklist.indexOf(host) !== -1) {
return false;
}
return true;
};
var default_url_options = {
protocols: [ 'http', 'https', 'ftp' ]
, require_tld: true
, require_protocol: false
, require_valid_protocol: true
, allow_underscores: false
, allow_trailing_dot: false
, allow_protocol_relative_urls: false
};
validator.isIP = function (str, version) {
version = validator.toString(version);
if (!version) {
return validator.isIP(str, 4) || validator.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 ::
validator.isURL = function (url, options) {
if (!url || url.length >= 2083 || /\s/.test(url)) {
return false;
}
if (url.indexOf('mailto:') === 0) {
return false;
}
options = merge(options, default_url_options);
var protocol, auth, host, hostname, port,
port_str, split;
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('://');
split = url.split('#');
url = split.shift();
// 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 = validator.isIP(blocks[blocks.length - 1], 4);
var expectedNumberOfBlocks = foundIPv4TransitionBlock ? 7 : 8;
split = url.split('?');
url = split.shift();
if (blocks.length > expectedNumberOfBlocks)
return false;
split = url.split('/');
url = split.shift();
split = url.split('@');
if (split.length > 1) {
auth = split.shift();
if (auth.indexOf(':') >= 0 && auth.split(':').length > 2) {
return false;
}
}
hostname = split.join('@');
split = hostname.split(':');
host = split.shift();
if (split.length) {
port_str = split.join(':');
port = parseInt(port_str, 10);
if (!/^[0-9]+$/.test(port_str) || port <= 0 || port > 65535) {
return false;
}
}
if (!validator.isIP(host) && !validator.isFQDN(host, options) &&
host !== 'localhost') {
return false;
}
if (options.host_whitelist &&
options.host_whitelist.indexOf(host) === -1) {
return false;
}
if (options.host_blacklist &&
options.host_blacklist.indexOf(host) !== -1) {
return false;
}
return true;
};
// 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;
}
validator.isIP = function (str, version) {
version = validator.toString(version);
if (!version) {
return validator.isIP(str, 4) || validator.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 ::
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;
}
}
// 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 = validator.isIP(blocks[blocks.length - 1], 4);
var expectedNumberOfBlocks = foundIPv4TransitionBlock ? 7 : 8;
if (foundOmissionBlock) {
return blocks.length >= 1;
} else {
return blocks.length === expectedNumberOfBlocks;
}
}
if (blocks.length > expectedNumberOfBlocks)
return false;
};
var default_fqdn_options = {
require_tld: true
, allow_underscores: false
, allow_trailing_dot: 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;
}
validator.isFQDN = function (str, options) {
options = merge(options, default_fqdn_options);
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;
}
}
/* Remove the optional trailing dot before checking validity */
if (options.allow_trailing_dot && str[str.length - 1] === '.') {
str = str.substring(0, str.length - 1);
if (foundOmissionBlock) {
return blocks.length >= 1;
} else {
return blocks.length === expectedNumberOfBlocks;
}
}
return false;
};
var default_fqdn_options = {
require_tld: true
, allow_underscores: false
, allow_trailing_dot: false
};
validator.isFQDN = function (str, options) {
options = merge(options, default_fqdn_options);
/* Remove the optional trailing dot before checking validity */
if (options.allow_trailing_dot && str[str.length - 1] === '.') {
str = str.substring(0, str.length - 1);
}
var parts = str.split('.');
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;
}
}
for (var part, i = 0; i < parts.length; i++) {
part = parts[i];
if (options.allow_underscores) {
if (part.indexOf('__') >= 0) {
return false;
}
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;
}
}
for (var part, i = 0; i < parts.length; i++) {
part = parts[i];
if (options.allow_underscores) {
if (part.indexOf('__') >= 0) {
return false;
}
part = part.replace(/_/g, '');
}
if (!/^[a-z\u00a1-\uffff0-9-]+$/i.test(part)) {
return false;
}
if (/[\uff01-\uff5e]/.test(part)) {
// disallow full-width chars
return false;
}
if (part[0] === '-' || part[part.length - 1] === '-' ||
part.indexOf('---') >= 0) {
return false;
}
}
return true;
};
part = part.replace(/_/g, '');
}
if (!/^[a-z\u00a1-\uffff0-9-]+$/i.test(part)) {
return false;
}
if (/[\uff01-\uff5e]/.test(part)) {
// disallow full-width chars
return false;
}
if (part[0] === '-' || part[part.length - 1] === '-' ||
part.indexOf('---') >= 0) {
return false;
}
}
return true;
};
validator.isBoolean = function(str) {
return (['true', 'false', '1', '0'].indexOf(str) >= 0);
};
validator.isBoolean = function(str) {
return (['true', 'false', '1', '0'].indexOf(str) >= 0);
};
validator.isAlpha = function (str) {
return alpha.test(str);
};
validator.isAlpha = function (str) {
return alpha.test(str);
};
validator.isAlphanumeric = function (str) {
return alphanumeric.test(str);
};
validator.isAlphanumeric = function (str) {
return alphanumeric.test(str);
};
validator.isNumeric = function (str) {
return numeric.test(str);
};
validator.isNumeric = function (str) {
return numeric.test(str);
};
validator.isDecimal = function (str) {
return str !== '' && decimal.test(str);
};
validator.isDecimal = function (str) {
return str !== '' && decimal.test(str);
};
validator.isHexadecimal = function (str) {
return hexadecimal.test(str);
};
validator.isHexadecimal = function (str) {
return hexadecimal.test(str);
};
validator.isHexColor = function (str) {
return hexcolor.test(str);
};
validator.isHexColor = function (str) {
return hexcolor.test(str);
};
validator.isLowercase = function (str) {
return str === str.toLowerCase();
};
validator.isLowercase = function (str) {
return str === str.toLowerCase();
};
validator.isUppercase = function (str) {
return str === str.toUpperCase();
};
validator.isUppercase = function (str) {
return str === str.toUpperCase();
};
validator.isInt = function (str, options) {
options = options || {};
return int.test(str) && (!options.hasOwnProperty('min') || str >= options.min) && (!options.hasOwnProperty('max') || str <= options.max);
};
validator.isInt = function (str, options) {
options = options || {};
return int.test(str) && (!options.hasOwnProperty('min') || str >= options.min) && (!options.hasOwnProperty('max') || str <= options.max);
};
validator.isFloat = function (str, options) {
options = options || {};
return str !== '' && float.test(str) && (!options.hasOwnProperty('min') || str >= options.min) && (!options.hasOwnProperty('max') || str <= options.max);
};
validator.isFloat = function (str, options) {
options = options || {};
if (str === '' || str === '.') {
return false;
}
return float.test(str) && (!options.hasOwnProperty('min') || str >= options.min) && (!options.hasOwnProperty('max') || str <= options.max);
};
validator.isDivisibleBy = function (str, num) {
return validator.toFloat(str) % validator.toInt(num) === 0;
};
validator.isDivisibleBy = function (str, num) {
return validator.toFloat(str) % validator.toInt(num) === 0;
};
validator.isNull = function (str) {
return str.length === 0;
};
validator.isNull = function (str) {
return str.length === 0;
};
validator.isLength = function (str, min, max) {
var surrogatePairs = str.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g) || [];
var len = str.length - surrogatePairs.length;
return len >= min && (typeof max === 'undefined' || len <= max);
};
validator.isLength = function (str, min, max) {
var surrogatePairs = str.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g) || [];
var len = str.length - surrogatePairs.length;
return len >= min && (typeof max === 'undefined' || len <= max);
};
validator.isByteLength = function (str, min, max) {
var len = encodeURI(str).split(/%..|./).length - 1;
return len >= min && (typeof max === 'undefined' || len <= max);
};
validator.isByteLength = function (str, min, max) {
var len = encodeURI(str).split(/%..|./).length - 1;
return len >= min && (typeof max === 'undefined' || len <= max);
};
validator.isUUID = function (str, version) {
var pattern = uuid[version ? version : 'all'];
return pattern && pattern.test(str);
};
validator.isUUID = function (str, version) {
var pattern = uuid[version ? version : 'all'];
return pattern && pattern.test(str);
};
validator.isDate = function (str) {
return !isNaN(Date.parse(str));
};
function getTimezoneOffset(str) {
var iso8601Parts = str.match(iso8601)
, timezone, sign, hours, minutes;
if (!iso8601Parts) {
str = str.toLowerCase();
timezone = str.match(/(?:\s|gmt\s*)(-|\+)(\d{1,4})(\s|$)/);
if (!timezone) {
return str.indexOf('gmt') !== -1 ? 0 : null;
}
sign = timezone[1];
var offset = timezone[2];
if (offset.length === 3) {
offset = '0' + offset;
}
if (offset.length <= 2) {
hours = 0;
minutes = parseInt(offset);
} else {
hours = parseInt(offset.slice(0, 2));
minutes = parseInt(offset.slice(2, 4));
}
} else {
timezone = iso8601Parts[21];
if (!timezone || timezone === 'z' || timezone === 'Z') {
return 0;
}
sign = iso8601Parts[22];
if (timezone.indexOf(':') !== -1) {
hours = parseInt(iso8601Parts[23]);
minutes = parseInt(iso8601Parts[24]);
} else {
hours = 0;
minutes = parseInt(iso8601Parts[23]);
}
}
return (hours * 60 + minutes) * (sign === '-' ? 1 : -1);
}
validator.isAfter = function (str, date) {
var comparison = validator.toDate(date || new Date())
, original = validator.toDate(str);
return !!(original && comparison && original > comparison);
};
validator.isDate = function (str) {
var normalizedDate = new Date(Date.parse(str));
if (isNaN(normalizedDate)) {
return false;
}
// normalizedDate is in the user's timezone. Apply the input
// timezone offset to the date so that the year and day match
// the input
var timezoneOffset = getTimezoneOffset(str);
if (timezoneOffset !== null) {
var timezoneDifference = normalizedDate.getTimezoneOffset() -
timezoneOffset;
normalizedDate = new Date(normalizedDate.getTime() +
60000 * timezoneDifference);
}
var day = String(normalizedDate.getDate());
var dayOrYear, dayOrYearMatches, year;
//check for valid double digits that could be late days
//check for all matches since a string like '12/23' is a valid date
//ignore everything with nearby colons
dayOrYearMatches = str.match(/(^|[^:\d])[23]\d([^:\d]|$)/g);
if (!dayOrYearMatches) {
return true;
}
dayOrYear = dayOrYearMatches.map(function(digitString) {
return digitString.match(/\d+/g)[0];
}).join('/');
year = String(normalizedDate.getFullYear()).slice(-2);
if (dayOrYear === day || dayOrYear === year) {
return true;
} else if ((dayOrYear === (day + '/' + year)) || (dayOrYear === (year + '/' + day))) {
return true;
}
return false;
};
validator.isBefore = function (str, date) {
var comparison = validator.toDate(date || new Date())
, original = validator.toDate(str);
return original && comparison && original < comparison;
};
validator.isAfter = function (str, date) {
var comparison = validator.toDate(date || new Date())
, original = validator.toDate(str);
return !!(original && comparison && original > comparison);
};
validator.isIn = function (str, options) {
var i;
if (Object.prototype.toString.call(options) === '[object Array]') {
var array = [];
for (i in options) {
array[i] = validator.toString(options[i]);
}
return array.indexOf(str) >= 0;
} else if (typeof options === 'object') {
return options.hasOwnProperty(str);
} else if (options && typeof options.indexOf === 'function') {
return options.indexOf(str) >= 0;
}
return false;
};
validator.isBefore = function (str, date) {
var comparison = validator.toDate(date || new Date())
, original = validator.toDate(str);
return !!(original && comparison && original < comparison);
};
validator.isCreditCard = function (str) {
var sanitized = str.replace(/[^0-9]+/g, '');
if (!creditCard.test(sanitized)) {
return false;
}
var sum = 0, digit, tmpNum, shouldDouble;
for (var i = sanitized.length - 1; i >= 0; i--) {
digit = sanitized.substring(i, (i + 1));
tmpNum = parseInt(digit, 10);
if (shouldDouble) {
tmpNum *= 2;
if (tmpNum >= 10) {
sum += ((tmpNum % 10) + 1);
} else {
sum += tmpNum;
}
} else {
sum += tmpNum;
}
shouldDouble = !shouldDouble;
}
return !!((sum % 10) === 0 ? sanitized : false);
};
validator.isIn = function (str, options) {
var i;
if (Object.prototype.toString.call(options) === '[object Array]') {
var array = [];
for (i in options) {
array[i] = validator.toString(options[i]);
}
return array.indexOf(str) >= 0;
} else if (typeof options === 'object') {
return options.hasOwnProperty(str);
} else if (options && typeof options.indexOf === 'function') {
return options.indexOf(str) >= 0;
}
return false;
};
validator.isISIN = function (str) {
if (!isin.test(str)) {
return false;
validator.isCreditCard = function (str) {
var sanitized = str.replace(/[^0-9]+/g, '');
if (!creditCard.test(sanitized)) {
return false;
}
var sum = 0, digit, tmpNum, shouldDouble;
for (var i = sanitized.length - 1; i >= 0; i--) {
digit = sanitized.substring(i, (i + 1));
tmpNum = parseInt(digit, 10);
if (shouldDouble) {
tmpNum *= 2;
if (tmpNum >= 10) {
sum += ((tmpNum % 10) + 1);
} else {
sum += tmpNum;
}
} else {
sum += tmpNum;
}
shouldDouble = !shouldDouble;
}
return !!((sum % 10) === 0 ? sanitized : false);
};
var checksumStr = str.replace(/[A-Z]/g, function(character) {
return parseInt(character, 36);
});
validator.isISIN = function (str) {
if (!isin.test(str)) {
return false;
}
var sum = 0, digit, tmpNum, 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;
var checksumStr = str.replace(/[A-Z]/g, function(character) {
return parseInt(character, 36);
});
var sum = 0, digit, tmpNum, 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;
};
return parseInt(str.substr(str.length - 1), 10) === (10000 - sum) % 10;
};
validator.isISBN = function (str, version) {
version = validator.toString(version);
if (!version) {
return validator.isISBN(str, 10) || validator.isISBN(str, 13);
}
var sanitized = str.replace(/[\s-]+/g, '')
, checksum = 0, i;
if (version === '10') {
if (!isbn10Maybe.test(sanitized)) {
return false;
}
for (i = 0; i < 9; i++) {
checksum += (i + 1) * sanitized.charAt(i);
}
if (sanitized.charAt(9) === 'X') {
checksum += 10 * 10;
} else {
checksum += 10 * sanitized.charAt(9);
}
if ((checksum % 11) === 0) {
return !!sanitized;
}
} else if (version === '13') {
if (!isbn13Maybe.test(sanitized)) {
return false;
}
var factor = [ 1, 3 ];
for (i = 0; i < 12; i++) {
checksum += factor[i % 2] * sanitized.charAt(i);
}
if (sanitized.charAt(12) - ((10 - (checksum % 10)) % 10) === 0) {
return !!sanitized;
}
}
validator.isISBN = function (str, version) {
version = validator.toString(version);
if (!version) {
return validator.isISBN(str, 10) || validator.isISBN(str, 13);
}
var sanitized = str.replace(/[\s-]+/g, '')
, checksum = 0, i;
if (version === '10') {
if (!isbn10Maybe.test(sanitized)) {
return false;
};
validator.isMobilePhone = function(str, locale) {
if (locale in phones) {
return phones[locale].test(str);
}
}
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;
};
}
var factor = [ 1, 3 ];
for (i = 0; i < 12; i++) {
checksum += factor[i % 2] * sanitized.charAt(i);
}
if (sanitized.charAt(12) - ((10 - (checksum % 10)) % 10) === 0) {
return !!sanitized;
}
}
return false;
};
var 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_space_after_digits: false
};
validator.isMobilePhone = function(str, locale) {
if (locale in phones) {
return phones[locale].test(str);
}
return false;
};
validator.isCurrency = function (str, options) {
options = merge(options, default_currency_options);
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_space_after_digits: false
};
return currencyRegex(options).test(str);
};
validator.isCurrency = function (str, options) {
options = merge(options, default_currency_options);
validator.isJSON = function (str) {
try {
var obj = JSON.parse(str);
return !!obj && typeof obj === 'object';
} catch (e) {}
return false;
};
return currencyRegex(options).test(str);
};
validator.isMultibyte = function (str) {
return multibyte.test(str);
};
validator.isJSON = function (str) {
try {
var obj = JSON.parse(str);
return !!obj && typeof obj === 'object';
} catch (e) {}
return false;
};
validator.isAscii = function (str) {
return ascii.test(str);
};
validator.isMultibyte = function (str) {
return multibyte.test(str);
};
validator.isFullWidth = function (str) {
return fullWidth.test(str);
};
validator.isAscii = function (str) {
return ascii.test(str);
};
validator.isHalfWidth = function (str) {
return halfWidth.test(str);
};
validator.isFullWidth = function (str) {
return fullWidth.test(str);
};
validator.isVariableWidth = function (str) {
return fullWidth.test(str) && halfWidth.test(str);
};
validator.isHalfWidth = function (str) {
return halfWidth.test(str);
};
validator.isSurrogatePair = function (str) {
return surrogatePair.test(str);
};
validator.isVariableWidth = function (str) {
return fullWidth.test(str) && halfWidth.test(str);
};
validator.isBase64 = function (str) {
return base64.test(str);
};
validator.isSurrogatePair = function (str) {
return surrogatePair.test(str);
};
validator.isMongoId = function (str) {
return validator.isHexadecimal(str) && str.length === 24;
};
validator.isBase64 = function (str) {
return base64.test(str);
};
validator.isISO8601 = function (str) {
return iso8601.test(str);
};
validator.isMongoId = function (str) {
return validator.isHexadecimal(str) && str.length === 24;
};
validator.ltrim = function (str, chars) {
var pattern = chars ? new RegExp('^[' + chars + ']+', 'g') : /^\s+/g;
return str.replace(pattern, '');
};
validator.isISO8601 = function (str) {
return iso8601.test(str);
};
validator.rtrim = function (str, chars) {
var pattern = chars ? new RegExp('[' + chars + ']+$', 'g') : /\s+$/g;
return str.replace(pattern, '');
};
validator.ltrim = function (str, chars) {
var pattern = chars ? new RegExp('^[' + chars + ']+', 'g') : /^\s+/g;
return str.replace(pattern, '');
};
validator.trim = function (str, chars) {
var pattern = chars ? new RegExp('^[' + chars + ']+|[' + chars + ']+$', 'g') : /^\s+|\s+$/g;
return str.replace(pattern, '');
};
validator.rtrim = function (str, chars) {
var pattern = chars ? new RegExp('[' + chars + ']+$', 'g') : /\s+$/g;
return str.replace(pattern, '');
};
validator.escape = function (str) {
return (str.replace(/&/g, '&amp;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#x27;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/\//g, '&#x2F;')
.replace(/\`/g, '&#96;'));
};
validator.trim = function (str, chars) {
var pattern = chars ? new RegExp('^[' + chars + ']+|[' + chars + ']+$', 'g') : /^\s+|\s+$/g;
return str.replace(pattern, '');
};
validator.stripLow = function (str, keep_new_lines) {
var chars = keep_new_lines ? '\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F' : '\\x00-\\x1F\\x7F';
return validator.blacklist(str, chars);
};
validator.escape = function (str) {
return (str.replace(/&/g, '&amp;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#x27;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/\//g, '&#x2F;')
.replace(/\`/g, '&#96;'));
};
validator.whitelist = function (str, chars) {
return str.replace(new RegExp('[^' + chars + ']+', 'g'), '');
};
validator.stripLow = function (str, keep_new_lines) {
var chars = keep_new_lines ? '\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F' : '\\x00-\\x1F\\x7F';
return validator.blacklist(str, chars);
};
validator.blacklist = function (str, chars) {
return str.replace(new RegExp('[' + chars + ']+', 'g'), '');
};
validator.whitelist = function (str, chars) {
return str.replace(new RegExp('[^' + chars + ']+', 'g'), '');
};
var default_normalize_email_options = {
lowercase: true
};
validator.blacklist = function (str, chars) {
return str.replace(new RegExp('[' + chars + ']+', 'g'), '');
};
validator.normalizeEmail = function (email, options) {
options = merge(options, default_normalize_email_options);
if (!validator.isEmail(email)) {
return false;
}
var parts = email.split('@', 2);
parts[1] = parts[1].toLowerCase();
if (parts[1] === 'gmail.com' || parts[1] === 'googlemail.com') {
parts[0] = parts[0].toLowerCase().replace(/\./g, '');
if (parts[0][0] === '+') {
return false;
}
parts[0] = parts[0].split('+')[0];
parts[1] = 'gmail.com';
} else if (options.lowercase) {
parts[0] = parts[0].toLowerCase();
}
return parts.join('@');
};
var default_normalize_email_options = {
lowercase: true
};
function merge(obj, defaults) {
obj = obj || {};
for (var key in defaults) {
if (typeof obj[key] === 'undefined') {
obj[key] = defaults[key];
}
}
return obj;
validator.normalizeEmail = function (email, options) {
options = merge(options, default_normalize_email_options);
if (!validator.isEmail(email)) {
return false;
}
var parts = email.split('@', 2);
parts[1] = parts[1].toLowerCase();
if (parts[1] === 'gmail.com' || parts[1] === 'googlemail.com') {
parts[0] = parts[0].toLowerCase().replace(/\./g, '');
if (parts[0][0] === '+') {
return false;
}
parts[0] = parts[0].split('+')[0];
parts[1] = 'gmail.com';
} else if (options.lowercase) {
parts[0] = parts[0].toLowerCase();
}
return parts.join('@');
};
function currencyRegex(options) {
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 + '\\d{2})?';
var pattern = whole_dollar_amount + 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;
}
}
return new RegExp(
'^' +
// 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
'(?!-? )(?=.*\\d)' +
pattern +
'$'
);
function merge(obj, defaults) {
obj = obj || {};
for (var key in defaults) {
if (typeof obj[key] === 'undefined') {
obj[key] = defaults[key];
}
}
return obj;
}
validator.init();
function currencyRegex(options) {
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 + '\\d{2})?';
var pattern = whole_dollar_amount + 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;
}
}
return new RegExp(
'^' +
// 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
'(?!-? )(?=.*\\d)' +
pattern +
'$'
);
}
return validator;
validator.init();
return validator;
});

@@ -865,0 +955,0 @@

@@ -1,1 +0,1 @@

"use strict";angular.module("angular.validators",[]).provider("asyncValidator",function(){var a,b=!1,c={},d="get".toLowerCase(),e="false",f=3,g="valid",h="true",i="{value}";this.baseUrl=function(b){return a=b,this},this.defaultState=function(a){return b=!!a,this},this.endpoint=function(a,b){return c[a]=b,this},this.httpVerb=function(a){return d=a.toLowerCase(),this},this.invalidResponse=function(a){return e=a,this},this.minLength=function(a){return f=parseInt(a),this},this.responseField=function(a){return g=a,this},this.validResponse=function(a){return h=a,this},this.wildcard=function(a){return i=a,this},this.$get=["$http","$q",function(j,k){var l={};for(var m in c)l[m]=a+c[m];return new function(){var a=k.defer();this.defaultState=b,this.endpoints=l,this.getUrl=function(a,b){return this.endpoints[a].replace(i,b)},this.invalidResponse=e,this.minLength=f,this.resolve=function(b){return j[d](b).then(function(b){return b.data[g]===h?a.resolve(!0):b.data[g]===e?a.reject(!1):void 0})["catch"](function(b){return a.reject()})},this.validResponse=h}}]}).service("nodeValidator",function(){var a={};return function(b,c){"undefined"!=typeof exports&&"undefined"!=typeof module?module.exports=c():"function"==typeof define&&"object"==typeof define.amd?define(c):a[b]=c()}("validator",function(a){function b(a,b){a=a||{};for(var c in b)"undefined"==typeof a[c]&&(a[c]=b[c]);return a}function c(a){var b="(\\"+a.symbol.replace(/\./g,"\\.")+")"+(a.require_symbol?"":"?"),c="-?",d="[1-9]\\d*",e="[1-9]\\d{0,2}(\\"+a.thousands_separator+"\\d{3})*",f=["0",d,e],g="("+f.join("|")+")?",h="(\\"+a.decimal_separator+"\\d{2})?",i=g+h;return a.allow_negatives&&!a.parens_for_negatives&&(a.negative_sign_after_digits?i+=c:a.negative_sign_before_digits&&(i=c+i)),a.allow_negative_sign_placeholder?i="( (?!\\-))?"+i:a.allow_space_after_symbol?i=" ?"+i:a.allow_space_after_digits&&(i+="( (?!$))?"),a.symbol_after_digits?i+=b:i=b+i,a.allow_negatives&&(a.parens_for_negatives?i="(\\("+i+"\\)|"+i+")":a.negative_sign_before_digits||a.negative_sign_after_digits||(i=c+i)),new RegExp("^(?!-? )(?=.*\\d)"+i+"$")}a={version:"4.0.2"};var d=/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~])+)*)|"(\s*(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e])|(\\[\x01-\x09\x0b\x0c\x0d-\x7f])))*\s*")$/i,e=/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|"(\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]))))*\s*")$/i,f=/^(?:[a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~\.]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(?:[a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~\.]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|\s)*<(.+)>$/i,g=/^(?: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})$/,h=/^[A-Z]{2}[0-9A-Z]{9}[0-9]$/,i=/^(?:[0-9]{9}X|[0-9]{10})$/,j=/^(?:[0-9]{13})$/,k=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/,l=/^[0-9A-F]{1,4}$/i,m={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},n=/^[A-Z]+$/i,o=/^[0-9A-Z]+$/i,p=/^[-+]?[0-9]+$/,q=/^(?:[-+]?(?:0|[1-9][0-9]*))$/,r=/^(?:[-+]?(?:[0-9]+))?(?:\.[0-9]*)?(?:[eE][\+\-]?(?:[0-9]+))?$/,s=/^[0-9A-F]+$/i,t=/^[-+]?([0-9]+|\.[0-9]+|[0-9]+\.[0-9]+)$/,u=/^#?([0-9A-F]{3}|[0-9A-F]{6})$/i,v=/^[\x00-\x7F]+$/,w=/[^\x00-\x7F]/,x=/[^\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/,y=/[\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/,z=/[\uD800-\uDBFF][\uDC00-\uDFFF]/,A=/^(?:[A-Z0-9+\/]{4})*(?:[A-Z0-9+\/]{2}==|[A-Z0-9+\/]{3}=|[A-Z0-9+\/]{4})$/i,B={"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}$/,"en-US":/^(\+?1)?[2-9]\d{2}[2-9](?!11)\d{6}$/,"en-ZM":/^(\+26)?09[567]\d{7}$/,"ru-RU":/^(\+?7|8)?9\d{9}$/},C=/^([\+-]?\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)?)?)?)?$/;a.extend=function(b,c){a[b]=function(){var b=Array.prototype.slice.call(arguments);return b[0]=a.toString(b[0]),c.apply(a,b)}},a.init=function(){for(var b in a)"function"==typeof a[b]&&"toString"!==b&&"toDate"!==b&&"extend"!==b&&"init"!==b&&a.extend(b,a[b])},a.toString=function(a){return"object"==typeof a&&null!==a&&a.toString?a=a.toString():null===a||"undefined"==typeof a||isNaN(a)&&!a.length?a="":"string"!=typeof a&&(a+=""),a},a.toDate=function(a){return"[object Date]"===Object.prototype.toString.call(a)?a:(a=Date.parse(a),isNaN(a)?null:new Date(a))},a.toFloat=function(a){return parseFloat(a)},a.toInt=function(a,b){return parseInt(a,b||10)},a.toBoolean=function(a,b){return b?"1"===a||"true"===a:"0"!==a&&"false"!==a&&""!==a},a.equals=function(b,c){return b===a.toString(c)},a.contains=function(b,c){return b.indexOf(a.toString(c))>=0},a.matches=function(a,b,c){return"[object RegExp]"!==Object.prototype.toString.call(b)&&(b=new RegExp(b,c)),b.test(a)};var D={allow_display_name:!1,allow_utf8_local_part:!0,require_tld:!0};a.isEmail=function(c,g){if(g=b(g,D),g.allow_display_name){var h=c.match(f);h&&(c=h[1])}var i=c.split("@"),j=i.pop(),k=i.join("@"),l=j.toLowerCase();return("gmail.com"===l||"googlemail.com"===l)&&(k=k.replace(/\./g,"").toLowerCase()),a.isByteLength(k,0,64)&&a.isByteLength(j,0,256)&&a.isFQDN(j,{require_tld:g.require_tld})?g.allow_utf8_local_part?e.test(k):d.test(k):!1};var E={protocols:["http","https","ftp"],require_tld:!0,require_protocol:!1,require_valid_protocol:!0,allow_underscores:!1,allow_trailing_dot:!1,allow_protocol_relative_urls:!1};a.isURL=function(c,d){if(!c||c.length>=2083||/\s/.test(c))return!1;if(0===c.indexOf("mailto:"))return!1;d=b(d,E);var e,f,g,h,i,j,k;if(k=c.split("://"),k.length>1){if(e=k.shift(),d.require_valid_protocol&&-1===d.protocols.indexOf(e))return!1}else{if(d.require_protocol)return!1;d.allow_protocol_relative_urls&&"//"===c.substr(0,2)&&(k[0]=c.substr(2))}return c=k.join("://"),k=c.split("#"),c=k.shift(),k=c.split("?"),c=k.shift(),k=c.split("/"),c=k.shift(),k=c.split("@"),k.length>1&&(f=k.shift(),f.indexOf(":")>=0&&f.split(":").length>2)?!1:(h=k.join("@"),k=h.split(":"),g=k.shift(),k.length&&(j=k.join(":"),i=parseInt(j,10),!/^[0-9]+$/.test(j)||0>=i||i>65535)?!1:a.isIP(g)||a.isFQDN(g,d)||"localhost"===g?d.host_whitelist&&-1===d.host_whitelist.indexOf(g)?!1:d.host_blacklist&&-1!==d.host_blacklist.indexOf(g)?!1:!0:!1)},a.isIP=function(b,c){if(c=a.toString(c),!c)return a.isIP(b,4)||a.isIP(b,6);if("4"===c){if(!k.test(b))return!1;var d=b.split(".").sort(function(a,b){return a-b});return d[3]<=255}if("6"===c){var e=b.split(":"),f=!1,g=a.isIP(e[e.length-1],4),h=g?7:8;if(e.length>h)return!1;if("::"===b)return!0;"::"===b.substr(0,2)?(e.shift(),e.shift(),f=!0):"::"===b.substr(b.length-2)&&(e.pop(),e.pop(),f=!0);for(var i=0;i<e.length;++i)if(""===e[i]&&i>0&&i<e.length-1){if(f)return!1;f=!0}else if(g&&i==e.length-1);else if(!l.test(e[i]))return!1;return f?e.length>=1:e.length===h}return!1};var F={require_tld:!0,allow_underscores:!1,allow_trailing_dot:!1};a.isFQDN=function(a,c){c=b(c,F),c.allow_trailing_dot&&"."===a[a.length-1]&&(a=a.substring(0,a.length-1));var d=a.split(".");if(c.require_tld){var e=d.pop();if(!d.length||!/^([a-z\u00a1-\uffff]{2,}|xn[a-z0-9-]{2,})$/i.test(e))return!1}for(var f,g=0;g<d.length;g++){if(f=d[g],c.allow_underscores){if(f.indexOf("__")>=0)return!1;f=f.replace(/_/g,"")}if(!/^[a-z\u00a1-\uffff0-9-]+$/i.test(f))return!1;if(/[\uff01-\uff5e]/.test(f))return!1;if("-"===f[0]||"-"===f[f.length-1]||f.indexOf("---")>=0)return!1}return!0},a.isBoolean=function(a){return["true","false","1","0"].indexOf(a)>=0},a.isAlpha=function(a){return n.test(a)},a.isAlphanumeric=function(a){return o.test(a)},a.isNumeric=function(a){return p.test(a)},a.isDecimal=function(a){return""!==a&&t.test(a)},a.isHexadecimal=function(a){return s.test(a)},a.isHexColor=function(a){return u.test(a)},a.isLowercase=function(a){return a===a.toLowerCase()},a.isUppercase=function(a){return a===a.toUpperCase()},a.isInt=function(a,b){return b=b||{},q.test(a)&&(!b.hasOwnProperty("min")||a>=b.min)&&(!b.hasOwnProperty("max")||a<=b.max)},a.isFloat=function(a,b){return b=b||{},""!==a&&r.test(a)&&(!b.hasOwnProperty("min")||a>=b.min)&&(!b.hasOwnProperty("max")||a<=b.max)},a.isDivisibleBy=function(b,c){return a.toFloat(b)%a.toInt(c)===0},a.isNull=function(a){return 0===a.length},a.isLength=function(a,b,c){var d=a.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g)||[],e=a.length-d.length;return e>=b&&("undefined"==typeof c||c>=e)},a.isByteLength=function(a,b,c){var d=encodeURI(a).split(/%..|./).length-1;return d>=b&&("undefined"==typeof c||c>=d)},a.isUUID=function(a,b){var c=m[b?b:"all"];return c&&c.test(a)},a.isDate=function(a){return!isNaN(Date.parse(a))},a.isAfter=function(b,c){var d=a.toDate(c||new Date),e=a.toDate(b);return!!(e&&d&&e>d)},a.isBefore=function(b,c){var d=a.toDate(c||new Date),e=a.toDate(b);return e&&d&&d>e},a.isIn=function(b,c){var d;if("[object Array]"===Object.prototype.toString.call(c)){var e=[];for(d in c)e[d]=a.toString(c[d]);return e.indexOf(b)>=0}return"object"==typeof c?c.hasOwnProperty(b):c&&"function"==typeof c.indexOf?c.indexOf(b)>=0:!1},a.isCreditCard=function(a){var b=a.replace(/[^0-9]+/g,"");if(!g.test(b))return!1;for(var c,d,e,f=0,h=b.length-1;h>=0;h--)c=b.substring(h,h+1),d=parseInt(c,10),e?(d*=2,f+=d>=10?d%10+1:d):f+=d,e=!e;return!!(f%10===0?b:!1)},a.isISIN=function(a){if(!h.test(a))return!1;for(var b,c,d=a.replace(/[A-Z]/g,function(a){return parseInt(a,36)}),e=0,f=!0,g=d.length-2;g>=0;g--)b=d.substring(g,g+1),c=parseInt(b,10),f?(c*=2,e+=c>=10?c+1:c):e+=c,f=!f;return parseInt(a.substr(a.length-1),10)===(1e4-e)%10},a.isISBN=function(b,c){if(c=a.toString(c),!c)return a.isISBN(b,10)||a.isISBN(b,13);var d,e=b.replace(/[\s-]+/g,""),f=0;if("10"===c){if(!i.test(e))return!1;for(d=0;9>d;d++)f+=(d+1)*e.charAt(d);if(f+="X"===e.charAt(9)?100:10*e.charAt(9),f%11===0)return!!e}else if("13"===c){if(!j.test(e))return!1;var g=[1,3];for(d=0;12>d;d++)f+=g[d%2]*e.charAt(d);if(e.charAt(12)-(10-f%10)%10===0)return!!e}return!1},a.isMobilePhone=function(a,b){return b in B?B[b].test(a):!1};var G={symbol:"$",require_symbol:!1,allow_space_after_symbol:!1,symbol_after_digits:!1,allow_negatives:!0,parens_for_negatives:!1,negative_sign_before_digits:!1,negative_sign_after_digits:!1,allow_negative_sign_placeholder:!1,thousands_separator:",",decimal_separator:".",allow_space_after_digits:!1};a.isCurrency=function(a,d){return d=b(d,G),c(d).test(a)},a.isJSON=function(a){try{var b=JSON.parse(a);return!!b&&"object"==typeof b}catch(c){}return!1},a.isMultibyte=function(a){return w.test(a)},a.isAscii=function(a){return v.test(a)},a.isFullWidth=function(a){return x.test(a)},a.isHalfWidth=function(a){return y.test(a)},a.isVariableWidth=function(a){return x.test(a)&&y.test(a)},a.isSurrogatePair=function(a){return z.test(a)},a.isBase64=function(a){return A.test(a)},a.isMongoId=function(b){return a.isHexadecimal(b)&&24===b.length},a.isISO8601=function(a){return C.test(a)},a.ltrim=function(a,b){var c=b?new RegExp("^["+b+"]+","g"):/^\s+/g;return a.replace(c,"")},a.rtrim=function(a,b){var c=b?new RegExp("["+b+"]+$","g"):/\s+$/g;return a.replace(c,"")},a.trim=function(a,b){var c=b?new RegExp("^["+b+"]+|["+b+"]+$","g"):/^\s+|\s+$/g;return a.replace(c,"")},a.escape=function(a){return a.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\//g,"&#x2F;").replace(/\`/g,"&#96;")},a.stripLow=function(b,c){var d=c?"\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F":"\\x00-\\x1F\\x7F";return a.blacklist(b,d)},a.whitelist=function(a,b){return a.replace(new RegExp("[^"+b+"]+","g"),"")},a.blacklist=function(a,b){return a.replace(new RegExp("["+b+"]+","g"),"")};var H={lowercase:!0};return a.normalizeEmail=function(c,d){if(d=b(d,H),!a.isEmail(c))return!1;var e=c.split("@",2);if(e[1]=e[1].toLowerCase(),"gmail.com"===e[1]||"googlemail.com"===e[1]){if(e[0]=e[0].toLowerCase().replace(/\./g,""),"+"===e[0][0])return!1;e[0]=e[0].split("+")[0],e[1]="gmail.com"}else d.lowercase&&(e[0]=e[0].toLowerCase());return e.join("@")},a.init(),a}),a.validator}).directive("asyncValid",["asyncValidator","$q",function(a,b){return{require:"ngModel",restrict:"A",link:function(c,d,e,f){var g=a[e.asyncValid],h=e.asyncDefaultState||a.defaultState,i=e.asyncInvalidResponse||a.invalidResponse,j=parseInt(e.asyncMinLength)||a.minLength,k=e.asyncValidResponse||a.validResponse;f.$asyncValidators.asyncValid=function(c,d){if(d.length<j&&h==k)return b.defer().resolve(!0);if(d.length<j&&h==i)return b.defer().resolve(!1);var e=a.getUrl(g,d);return a.resolve(e).then(function(a){return a?a===!0?b.defer().resolve(!0):0==a?b.defer().reject(!1):!1:b.reject(!1)})}}}}]).directive("contains",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.contains=function(b,c){return e.$isEmpty(b)?!0:a.contains(c,d.contains)}}}}]).directive("equals",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.equals=function(b,c){return e.$isEmpty(b)?!0:a.equals(c,d.equals)}}}}]).directive("isAfter",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isAfter=function(b,c){return e.$isEmpty(b)?!0:""!==d.isAfter?a.isAfter(c,d.isAfter):a.isAfter(c)}}}}]).directive("isAlpha",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isAlpha=function(b,c){return e.$isEmpty(b)?!0:a.isAlpha(c)}}}}]).directive("isAlphanumeric",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isAlphanumeric=function(b,c){return e.$isEmpty(b)?!0:a.isAlphanumeric(c)}}}}]).directive("isAscii",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isAscii=function(b,c){return e.$isEmpty(b)?!0:a.isAscii(c)}}}}]).directive("isBase64",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isAlphanumeric=function(b,c){return e.$isEmpty(b)?!0:a.isBase64(c)}}}}]).directive("isBefore",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isBefore=function(b,c){return e.$isEmpty(b)?!0:""!==d.isBefore?a.isBefore(c,d.isBefore):a.isBefore(c)}}}}]).directive("isBoolean",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isBoolean=function(b,c){return e.$isEmpty(b)?!0:a.isBoolean(c)}}}}]).directive("isCreditCard",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isCreditCard=function(b,c){return e.$isEmpty(b)?!0:a.isCreditCard(c)}}}}]).directive("isCurrency",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isCurrency=function(b,c){return e.$isEmpty(b)?!0:null!=d.isCurrency&&""!=d.isCurrency?a.isCurrency(c,d.isCurrency):a.isCurrency(c)}}}}]).directive("isDate",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isDate=function(b,c){return e.$isEmpty(b)?!0:a.isDate(c)}}}}]).directive("isDivisibleBy",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isDivisibleBy=function(b,c){return e.$isEmpty(b)?!0:a.isDivisibleBy(c,d.isDivisibleBy)}}}}]).directive("isEmail",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isEmail=function(b,c){return e.$isEmpty(b)?!0:null!=d.isEmail&&""!=d.isEmail?a.isEmail(c,d.isEmail):a.isEmail(c)}}}}]).directive("isFqdn",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isFqdn=function(b,c){return e.$isEmpty(b)?!0:null!=d.isFqdn&&""!=d.isFqdn?a.isFQDN(c,d.isFqdn):a.isFQDN(c)}}}}]).directive("isFloat",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isFloat=function(b,c){return e.$isEmpty(b)?!0:a.isFloat(c)}}}}]).directive("isFullWidth",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isFullWidth=function(b,c){return e.$isEmpty(b)?!0:a.isFullWidth(c)}}}}]).directive("isHalfWidth",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isHalfWidth=function(b,c){return e.$isEmpty(b)?!0:a.isHalfWidth(c)}}}}]).directive("isHexColor",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isHexColor=function(b,c){return e.$isEmpty(b)?!0:a.isHexColor(c)}}}}]).directive("isHexadecimal",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isHexadecimal=function(b,c){return e.$isEmpty(b)?!0:a.isHexadecimal(c)}}}}]).directive("isIp",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isIp=function(b,c){if(e.$isEmpty(b))return!0;var f=d.isIp.toString();return"6"===f||"4"===f?a.isIP(c,f):a.isIP(c)}}}}]).directive("isIsbn",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isIsbn=function(b,c){if(e.$isEmpty(b))return!0;var f=parseInt(d.isIsbn);return 10===f||13===f?a.isISBN(c,f):a.isISBN(c)}}}}]).directive("isIsin",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isIsin=function(b,c){return e.$isEmpty(b)?!0:a.isISIN(c)}}}}]).directive("isIso8601",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isIsin=function(b,c){return e.$isEmpty(b)?!0:a.isISO8601(c)}}}}]).directive("isIn",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isIn=function(b,c){return e.$isEmpty(b)?!0:a.isIn(c,d.isIn)}}}}]).directive("isInt",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isInt=function(b,c){return e.$isEmpty(b)?!0:a.isInt(c)}}}}]).directive("isJson",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isJson=function(b,c){return e.$isEmpty(b)?!0:a.isJSON(c)}}}}]).directive("isLowercase",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isLowercase=function(b,c){return e.$isEmpty(b)?!0:a.isLowercase(c)}}}}]).directive("isMobilePhone",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isMobilePhone=function(b,c){return e.$isEmpty(b)?!0:""!==d.isMobilePhone?a.isMobilePhone(c,d.isMobilePhone):!1}}}}]).directive("isMongoId",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isMongoId=function(b,c){return e.$isEmpty(b)?!0:a.isMongoId(c)}}}}]).directive("isMultibyte",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isMultibyte=function(b,c){return e.$isEmpty(b)?!0:a.isMultibyte(c)}}}}]).directive("isNull",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isNull=function(b,c){return e.$isEmpty(b)?!0:a.isNull(c)}}}}]).directive("isNumeric",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isNumeric=function(b,c){return e.$isEmpty(b)?!0:a.isNumeric(c)}}}}]).directive("isUrl",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isUrl=function(b,c){return e.$isEmpty(b)?!0:null!=d.isUrl&&""!=d.isUrl?a.isURL(c,d.isUrl):a.isURL(c)}}}}]).directive("isUuid",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isUuid=function(b,c){if(e.$isEmpty(b))return!0;var f=parseInt(d.isUuid.toString());return 3===f||4===f||5===f?a.isUUID(c,f):a.isUUID(c)}}}}]).directive("isUppercase",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isUppercase=function(b,c){return e.$isEmpty(b)?!0:a.isUppercase(c)}}}}]).directive("isVariableWidth",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isVariableWidth=function(b,c){return e.$isEmpty(b)?!0:a.isVariableWidth(c)}}}}]).directive("isSurrogatePair",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isSurrogatePair=function(b,c){return e.$isEmpty(b)?!0:a.isSurrogatePair(c)}}}}]).directive("watchEquals",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.watchEquals=function(c,f){b.$watch(d.ngModel,function(){null!=f&&null!=d.watchEquals&&e.$setValidity("watchEquals",a.equals(f,d.watchEquals))}),d.$observe("watchEquals",function(){null!=f&&null!=d.watchEquals&&e.$setValidity("watchEquals",a.equals(f,d.watchEquals))})}}}}]);
"use strict";angular.module("angular.validators",[]).provider("asyncValidator",function(){var a,b=!1,c={},d="get".toLowerCase(),e="false",f=3,g="valid",h="true",i="{value}";this.baseUrl=function(b){return a=b,this},this.defaultState=function(a){return b=!!a,this},this.endpoint=function(a,b){return c[a]=b,this},this.httpVerb=function(a){return d=a.toLowerCase(),this},this.invalidResponse=function(a){return e=a,this},this.minLength=function(a){return f=parseInt(a),this},this.responseField=function(a){return g=a,this},this.validResponse=function(a){return h=a,this},this.wildcard=function(a){return i=a,this},this.$get=["$http","$q",function(j,k){var l={};for(var m in c)l[m]=a+c[m];return new function(){var a=k.defer();this.defaultState=b,this.endpoints=l,this.getUrl=function(a,b){return this.endpoints[a].replace(i,b)},this.invalidResponse=e,this.minLength=f,this.resolve=function(b){return j[d](b).then(function(b){return b.data[g]===h?a.resolve(!0):b.data[g]===e?a.reject(!1):void 0})["catch"](function(b){return a.reject()})},this.validResponse=h}}]}).service("nodeValidator",function(){var a={};return function(b,c){"undefined"!=typeof exports&&"undefined"!=typeof module?module.exports=c():"function"==typeof define&&"object"==typeof define.amd?define(c):a[b]=c()}("validator",function(a){function b(a){var b,c,d,e,f=a.match(F);if(f){if(b=f[21],!b||"z"===b||"Z"===b)return 0;c=f[22],-1!==b.indexOf(":")?(d=parseInt(f[23]),e=parseInt(f[24])):(d=0,e=parseInt(f[23]))}else{if(a=a.toLowerCase(),b=a.match(/(?:\s|gmt\s*)(-|\+)(\d{1,4})(\s|$)/),!b)return-1!==a.indexOf("gmt")?0:null;c=b[1];var g=b[2];3===g.length&&(g="0"+g),g.length<=2?(d=0,e=parseInt(g)):(d=parseInt(g.slice(0,2)),e=parseInt(g.slice(2,4)))}return(60*d+e)*("-"===c?1:-1)}function c(a,b){a=a||{};for(var c in b)"undefined"==typeof a[c]&&(a[c]=b[c]);return a}function d(a){var b="(\\"+a.symbol.replace(/\./g,"\\.")+")"+(a.require_symbol?"":"?"),c="-?",d="[1-9]\\d*",e="[1-9]\\d{0,2}(\\"+a.thousands_separator+"\\d{3})*",f=["0",d,e],g="("+f.join("|")+")?",h="(\\"+a.decimal_separator+"\\d{2})?",i=g+h;return a.allow_negatives&&!a.parens_for_negatives&&(a.negative_sign_after_digits?i+=c:a.negative_sign_before_digits&&(i=c+i)),a.allow_negative_sign_placeholder?i="( (?!\\-))?"+i:a.allow_space_after_symbol?i=" ?"+i:a.allow_space_after_digits&&(i+="( (?!$))?"),a.symbol_after_digits?i+=b:i=b+i,a.allow_negatives&&(a.parens_for_negatives?i="(\\("+i+"\\)|"+i+")":a.negative_sign_before_digits||a.negative_sign_after_digits||(i=c+i)),new RegExp("^(?!-? )(?=.*\\d)"+i+"$")}a={version:"4.2.1"};var e=/^[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,h=/^([\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,i=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\s]*<(.+)>$/i,j=/^(?: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})$/,k=/^[A-Z]{2}[0-9A-Z]{9}[0-9]$/,l=/^(?:[0-9]{9}X|[0-9]{10})$/,m=/^(?:[0-9]{13})$/,n=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/,o=/^[0-9A-F]{1,4}$/i,p={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},q=/^[A-Z]+$/i,r=/^[0-9A-Z]+$/i,s=/^[-+]?[0-9]+$/,t=/^(?:[-+]?(?:0|[1-9][0-9]*))$/,u=/^(?:[-+]?(?:[0-9]+))?(?:\.[0-9]*)?(?:[eE][\+\-]?(?:[0-9]+))?$/,v=/^[0-9A-F]+$/i,w=/^[-+]?([0-9]+|\.[0-9]+|[0-9]+\.[0-9]+)$/,x=/^#?([0-9A-F]{3}|[0-9A-F]{6})$/i,y=/^[\x00-\x7F]+$/,z=/[^\x00-\x7F]/,A=/[^\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/,B=/[\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/,C=/[\uD800-\uDBFF][\uDC00-\uDFFF]/,D=/^(?:[A-Z0-9+\/]{4})*(?:[A-Z0-9+\/]{2}==|[A-Z0-9+\/]{3}=|[A-Z0-9+\/]{4})$/i,E={"zh-CN":/^(\+?0?86\-?)?1[345789]\d{9}$/,"zh-TW":/^(\+?886\-?|0)?9\d{8}$/,"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}$/,"en-US":/^(\+?1)?[2-9]\d{2}[2-9](?!11)\d{6}$/,"en-ZM":/^(\+26)?09[567]\d{7}$/,"ru-RU":/^(\+?7|8)?9\d{9}$/,"nb-NO":/^(\+?47)?[49]\d{7}$/,"nn-NO":/^(\+?47)?[49]\d{7}$/},F=/^([\+-]?\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)?)?)?)?$/;a.extend=function(b,c){a[b]=function(){var b=Array.prototype.slice.call(arguments);return b[0]=a.toString(b[0]),c.apply(a,b)}},a.init=function(){for(var b in a)"function"==typeof a[b]&&"toString"!==b&&"toDate"!==b&&"extend"!==b&&"init"!==b&&a.extend(b,a[b])},a.toString=function(a){return"object"==typeof a&&null!==a&&a.toString?a=a.toString():(null===a||"undefined"==typeof a||isNaN(a)&&!a.length)&&(a=""),""+a},a.toDate=function(a){return"[object Date]"===Object.prototype.toString.call(a)?a:(a=Date.parse(a),isNaN(a)?null:new Date(a))},a.toFloat=function(a){return parseFloat(a)},a.toInt=function(a,b){return parseInt(a,b||10)},a.toBoolean=function(a,b){return b?"1"===a||"true"===a:"0"!==a&&"false"!==a&&""!==a},a.equals=function(b,c){return b===a.toString(c)},a.contains=function(b,c){return b.indexOf(a.toString(c))>=0},a.matches=function(a,b,c){return"[object RegExp]"!==Object.prototype.toString.call(b)&&(b=new RegExp(b,c)),b.test(a)};var G={allow_display_name:!1,allow_utf8_local_part:!0,require_tld:!0};a.isEmail=function(b,d){if(d=c(d,G),d.allow_display_name){var j=b.match(i);j&&(b=j[1])}var k=b.split("@"),l=k.pop(),m=k.join("@"),n=l.toLowerCase();if(("gmail.com"===n||"googlemail.com"===n)&&(m=m.replace(/\./g,"").toLowerCase()),!a.isByteLength(m,0,64)||!a.isByteLength(l,0,256))return!1;if(!a.isFQDN(l,{require_tld:d.require_tld}))return!1;if('"'===m[0])return m=m.slice(1,m.length-1),d.allow_utf8_local_part?h.test(m):f.test(m);for(var o=d.allow_utf8_local_part?g:e,p=m.split("."),q=0;q<p.length;q++)if(!o.test(p[q]))return!1;return!0};var H={protocols:["http","https","ftp"],require_tld:!0,require_protocol:!1,require_valid_protocol:!0,allow_underscores:!1,allow_trailing_dot:!1,allow_protocol_relative_urls:!1};a.isURL=function(b,d){if(!b||b.length>=2083||/\s/.test(b))return!1;if(0===b.indexOf("mailto:"))return!1;d=c(d,H);var e,f,g,h,i,j,k;if(k=b.split("://"),k.length>1){if(e=k.shift(),d.require_valid_protocol&&-1===d.protocols.indexOf(e))return!1}else{if(d.require_protocol)return!1;d.allow_protocol_relative_urls&&"//"===b.substr(0,2)&&(k[0]=b.substr(2))}return b=k.join("://"),k=b.split("#"),b=k.shift(),k=b.split("?"),b=k.shift(),k=b.split("/"),b=k.shift(),k=b.split("@"),k.length>1&&(f=k.shift(),f.indexOf(":")>=0&&f.split(":").length>2)?!1:(h=k.join("@"),k=h.split(":"),g=k.shift(),k.length&&(j=k.join(":"),i=parseInt(j,10),!/^[0-9]+$/.test(j)||0>=i||i>65535)?!1:a.isIP(g)||a.isFQDN(g,d)||"localhost"===g?d.host_whitelist&&-1===d.host_whitelist.indexOf(g)?!1:d.host_blacklist&&-1!==d.host_blacklist.indexOf(g)?!1:!0:!1)},a.isIP=function(b,c){if(c=a.toString(c),!c)return a.isIP(b,4)||a.isIP(b,6);if("4"===c){if(!n.test(b))return!1;var d=b.split(".").sort(function(a,b){return a-b});return d[3]<=255}if("6"===c){var e=b.split(":"),f=!1,g=a.isIP(e[e.length-1],4),h=g?7:8;if(e.length>h)return!1;if("::"===b)return!0;"::"===b.substr(0,2)?(e.shift(),e.shift(),f=!0):"::"===b.substr(b.length-2)&&(e.pop(),e.pop(),f=!0);for(var i=0;i<e.length;++i)if(""===e[i]&&i>0&&i<e.length-1){if(f)return!1;f=!0}else if(g&&i==e.length-1);else if(!o.test(e[i]))return!1;return f?e.length>=1:e.length===h}return!1};var I={require_tld:!0,allow_underscores:!1,allow_trailing_dot:!1};a.isFQDN=function(a,b){b=c(b,I),b.allow_trailing_dot&&"."===a[a.length-1]&&(a=a.substring(0,a.length-1));var d=a.split(".");if(b.require_tld){var e=d.pop();if(!d.length||!/^([a-z\u00a1-\uffff]{2,}|xn[a-z0-9-]{2,})$/i.test(e))return!1}for(var f,g=0;g<d.length;g++){if(f=d[g],b.allow_underscores){if(f.indexOf("__")>=0)return!1;f=f.replace(/_/g,"")}if(!/^[a-z\u00a1-\uffff0-9-]+$/i.test(f))return!1;if(/[\uff01-\uff5e]/.test(f))return!1;if("-"===f[0]||"-"===f[f.length-1]||f.indexOf("---")>=0)return!1}return!0},a.isBoolean=function(a){return["true","false","1","0"].indexOf(a)>=0},a.isAlpha=function(a){return q.test(a)},a.isAlphanumeric=function(a){return r.test(a)},a.isNumeric=function(a){return s.test(a)},a.isDecimal=function(a){return""!==a&&w.test(a)},a.isHexadecimal=function(a){return v.test(a)},a.isHexColor=function(a){return x.test(a)},a.isLowercase=function(a){return a===a.toLowerCase()},a.isUppercase=function(a){return a===a.toUpperCase()},a.isInt=function(a,b){return b=b||{},t.test(a)&&(!b.hasOwnProperty("min")||a>=b.min)&&(!b.hasOwnProperty("max")||a<=b.max)},a.isFloat=function(a,b){return b=b||{},""===a||"."===a?!1:u.test(a)&&(!b.hasOwnProperty("min")||a>=b.min)&&(!b.hasOwnProperty("max")||a<=b.max)},a.isDivisibleBy=function(b,c){return a.toFloat(b)%a.toInt(c)===0},a.isNull=function(a){return 0===a.length},a.isLength=function(a,b,c){var d=a.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g)||[],e=a.length-d.length;return e>=b&&("undefined"==typeof c||c>=e)},a.isByteLength=function(a,b,c){var d=encodeURI(a).split(/%..|./).length-1;return d>=b&&("undefined"==typeof c||c>=d)},a.isUUID=function(a,b){var c=p[b?b:"all"];return c&&c.test(a)},a.isDate=function(a){var c=new Date(Date.parse(a));if(isNaN(c))return!1;var d=b(a);if(null!==d){var e=c.getTimezoneOffset()-d;c=new Date(c.getTime()+6e4*e)}var f,g,h,i=String(c.getDate());return(g=a.match(/(^|[^:\d])[23]\d([^:\d]|$)/g))?(f=g.map(function(a){return a.match(/\d+/g)[0]}).join("/"),h=String(c.getFullYear()).slice(-2),f===i||f===h?!0:f===i+"/"+h||f===h+"/"+i?!0:!1):!0},a.isAfter=function(b,c){var d=a.toDate(c||new Date),e=a.toDate(b);return!!(e&&d&&e>d)},a.isBefore=function(b,c){var d=a.toDate(c||new Date),e=a.toDate(b);return!!(e&&d&&d>e)},a.isIn=function(b,c){var d;if("[object Array]"===Object.prototype.toString.call(c)){var e=[];for(d in c)e[d]=a.toString(c[d]);return e.indexOf(b)>=0}return"object"==typeof c?c.hasOwnProperty(b):c&&"function"==typeof c.indexOf?c.indexOf(b)>=0:!1},a.isCreditCard=function(a){var b=a.replace(/[^0-9]+/g,"");if(!j.test(b))return!1;for(var c,d,e,f=0,g=b.length-1;g>=0;g--)c=b.substring(g,g+1),d=parseInt(c,10),e?(d*=2,f+=d>=10?d%10+1:d):f+=d,e=!e;return!!(f%10===0?b:!1)},a.isISIN=function(a){if(!k.test(a))return!1;for(var b,c,d=a.replace(/[A-Z]/g,function(a){return parseInt(a,36)}),e=0,f=!0,g=d.length-2;g>=0;g--)b=d.substring(g,g+1),c=parseInt(b,10),f?(c*=2,e+=c>=10?c+1:c):e+=c,f=!f;return parseInt(a.substr(a.length-1),10)===(1e4-e)%10},a.isISBN=function(b,c){if(c=a.toString(c),!c)return a.isISBN(b,10)||a.isISBN(b,13);var d,e=b.replace(/[\s-]+/g,""),f=0;if("10"===c){if(!l.test(e))return!1;for(d=0;9>d;d++)f+=(d+1)*e.charAt(d);if(f+="X"===e.charAt(9)?100:10*e.charAt(9),f%11===0)return!!e}else if("13"===c){if(!m.test(e))return!1;var g=[1,3];for(d=0;12>d;d++)f+=g[d%2]*e.charAt(d);if(e.charAt(12)-(10-f%10)%10===0)return!!e}return!1},a.isMobilePhone=function(a,b){return b in E?E[b].test(a):!1};var J={symbol:"$",require_symbol:!1,allow_space_after_symbol:!1,symbol_after_digits:!1,allow_negatives:!0,parens_for_negatives:!1,negative_sign_before_digits:!1,negative_sign_after_digits:!1,allow_negative_sign_placeholder:!1,thousands_separator:",",decimal_separator:".",allow_space_after_digits:!1};a.isCurrency=function(a,b){return b=c(b,J),d(b).test(a)},a.isJSON=function(a){try{var b=JSON.parse(a);return!!b&&"object"==typeof b}catch(c){}return!1},a.isMultibyte=function(a){return z.test(a)},a.isAscii=function(a){return y.test(a)},a.isFullWidth=function(a){return A.test(a)},a.isHalfWidth=function(a){return B.test(a)},a.isVariableWidth=function(a){return A.test(a)&&B.test(a)},a.isSurrogatePair=function(a){return C.test(a)},a.isBase64=function(a){return D.test(a)},a.isMongoId=function(b){return a.isHexadecimal(b)&&24===b.length},a.isISO8601=function(a){return F.test(a)},a.ltrim=function(a,b){var c=b?new RegExp("^["+b+"]+","g"):/^\s+/g;return a.replace(c,"")},a.rtrim=function(a,b){var c=b?new RegExp("["+b+"]+$","g"):/\s+$/g;return a.replace(c,"")},a.trim=function(a,b){var c=b?new RegExp("^["+b+"]+|["+b+"]+$","g"):/^\s+|\s+$/g;return a.replace(c,"")},a.escape=function(a){return a.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\//g,"&#x2F;").replace(/\`/g,"&#96;")},a.stripLow=function(b,c){var d=c?"\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F":"\\x00-\\x1F\\x7F";return a.blacklist(b,d)},a.whitelist=function(a,b){return a.replace(new RegExp("[^"+b+"]+","g"),"")},a.blacklist=function(a,b){return a.replace(new RegExp("["+b+"]+","g"),"")};var K={lowercase:!0};return a.normalizeEmail=function(b,d){if(d=c(d,K),!a.isEmail(b))return!1;var e=b.split("@",2);if(e[1]=e[1].toLowerCase(),"gmail.com"===e[1]||"googlemail.com"===e[1]){if(e[0]=e[0].toLowerCase().replace(/\./g,""),"+"===e[0][0])return!1;e[0]=e[0].split("+")[0],e[1]="gmail.com"}else d.lowercase&&(e[0]=e[0].toLowerCase());return e.join("@")},a.init(),a}),a.validator}).directive("asyncValid",["asyncValidator","$q",function(a,b){return{require:"ngModel",restrict:"A",link:function(c,d,e,f){var g=a[e.asyncValid],h=e.asyncDefaultState||a.defaultState,i=e.asyncInvalidResponse||a.invalidResponse,j=parseInt(e.asyncMinLength)||a.minLength,k=e.asyncValidResponse||a.validResponse;f.$asyncValidators.asyncValid=function(c,d){if(d.length<j&&h==k)return b.defer().resolve(!0);if(d.length<j&&h==i)return b.defer().resolve(!1);var e=a.getUrl(g,d);return a.resolve(e).then(function(a){return a?a===!0?b.defer().resolve(!0):0==a?b.defer().reject(!1):!1:b.reject(!1)})}}}}]).directive("contains",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.contains=function(b,c){return e.$isEmpty(b)?!0:a.contains(c,d.contains)}}}}]).directive("equals",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.equals=function(b,c){return e.$isEmpty(b)?!0:a.equals(c,d.equals)}}}}]).directive("isAfter",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isAfter=function(b,c){return e.$isEmpty(b)?!0:""!==d.isAfter?a.isAfter(c,d.isAfter):a.isAfter(c)}}}}]).directive("isAlpha",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isAlpha=function(b,c){return e.$isEmpty(b)?!0:a.isAlpha(c)}}}}]).directive("isAlphanumeric",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isAlphanumeric=function(b,c){return e.$isEmpty(b)?!0:a.isAlphanumeric(c)}}}}]).directive("isAscii",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isAscii=function(b,c){return e.$isEmpty(b)?!0:a.isAscii(c)}}}}]).directive("isBase64",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isAlphanumeric=function(b,c){return e.$isEmpty(b)?!0:a.isBase64(c)}}}}]).directive("isBefore",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isBefore=function(b,c){return e.$isEmpty(b)?!0:""!==d.isBefore?a.isBefore(c,d.isBefore):a.isBefore(c)}}}}]).directive("isBoolean",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isBoolean=function(b,c){return e.$isEmpty(b)?!0:a.isBoolean(c)}}}}]).directive("isCreditCard",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isCreditCard=function(b,c){return e.$isEmpty(b)?!0:a.isCreditCard(c)}}}}]).directive("isCurrency",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isCurrency=function(b,c){return e.$isEmpty(b)?!0:null!=d.isCurrency&&""!=d.isCurrency?a.isCurrency(c,d.isCurrency):a.isCurrency(c)}}}}]).directive("isDate",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isDate=function(b,c){return e.$isEmpty(b)?!0:a.isDate(c)}}}}]).directive("isDivisibleBy",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isDivisibleBy=function(b,c){return e.$isEmpty(b)?!0:a.isDivisibleBy(c,d.isDivisibleBy)}}}}]).directive("isEmail",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isEmail=function(b,c){return e.$isEmpty(b)?!0:null!=d.isEmail&&""!=d.isEmail?a.isEmail(c,d.isEmail):a.isEmail(c)}}}}]).directive("isFqdn",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isFqdn=function(b,c){return e.$isEmpty(b)?!0:null!=d.isFqdn&&""!=d.isFqdn?a.isFQDN(c,d.isFqdn):a.isFQDN(c)}}}}]).directive("isFloat",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isFloat=function(b,c){return e.$isEmpty(b)?!0:a.isFloat(c)}}}}]).directive("isFullWidth",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isFullWidth=function(b,c){return e.$isEmpty(b)?!0:a.isFullWidth(c)}}}}]).directive("isHalfWidth",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isHalfWidth=function(b,c){return e.$isEmpty(b)?!0:a.isHalfWidth(c)}}}}]).directive("isHexColor",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isHexColor=function(b,c){return e.$isEmpty(b)?!0:a.isHexColor(c)}}}}]).directive("isHexadecimal",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isHexadecimal=function(b,c){return e.$isEmpty(b)?!0:a.isHexadecimal(c)}}}}]).directive("isIp",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isIp=function(b,c){if(e.$isEmpty(b))return!0;var f=d.isIp.toString();return"6"===f||"4"===f?a.isIP(c,f):a.isIP(c)}}}}]).directive("isIsbn",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isIsbn=function(b,c){if(e.$isEmpty(b))return!0;var f=parseInt(d.isIsbn);return 10===f||13===f?a.isISBN(c,f):a.isISBN(c)}}}}]).directive("isIsin",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isIsin=function(b,c){return e.$isEmpty(b)?!0:a.isISIN(c)}}}}]).directive("isIso8601",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isIsin=function(b,c){return e.$isEmpty(b)?!0:a.isISO8601(c)}}}}]).directive("isIn",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isIn=function(b,c){return e.$isEmpty(b)?!0:a.isIn(c,d.isIn)}}}}]).directive("isInt",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isInt=function(b,c){return e.$isEmpty(b)?!0:a.isInt(c)}}}}]).directive("isJson",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isJson=function(b,c){return e.$isEmpty(b)?!0:a.isJSON(c)}}}}]).directive("isLowercase",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isLowercase=function(b,c){return e.$isEmpty(b)?!0:a.isLowercase(c)}}}}]).directive("isMobilePhone",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isMobilePhone=function(b,c){return e.$isEmpty(b)?!0:""!==d.isMobilePhone?a.isMobilePhone(c,d.isMobilePhone):!1}}}}]).directive("isMongoId",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isMongoId=function(b,c){return e.$isEmpty(b)?!0:a.isMongoId(c)}}}}]).directive("isMultibyte",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isMultibyte=function(b,c){return e.$isEmpty(b)?!0:a.isMultibyte(c)}}}}]).directive("isNull",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isNull=function(b,c){return e.$isEmpty(b)?!0:a.isNull(c)}}}}]).directive("isNumeric",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isNumeric=function(b,c){return e.$isEmpty(b)?!0:a.isNumeric(c)}}}}]).directive("isUrl",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isUrl=function(b,c){return e.$isEmpty(b)?!0:null!=d.isUrl&&""!=d.isUrl?a.isURL(c,d.isUrl):a.isURL(c)}}}}]).directive("isUuid",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isUuid=function(b,c){if(e.$isEmpty(b))return!0;var f=parseInt(d.isUuid.toString());return 3===f||4===f||5===f?a.isUUID(c,f):a.isUUID(c)}}}}]).directive("isUppercase",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isUppercase=function(b,c){return e.$isEmpty(b)?!0:a.isUppercase(c)}}}}]).directive("isVariableWidth",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isVariableWidth=function(b,c){return e.$isEmpty(b)?!0:a.isVariableWidth(c)}}}}]).directive("isSurrogatePair",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.isSurrogatePair=function(b,c){return e.$isEmpty(b)?!0:a.isSurrogatePair(c)}}}}]).directive("watchEquals",["nodeValidator",function(a){return{require:"ngModel",restrict:"A",link:function(b,c,d,e){e.$validators.watchEquals=function(c,f){b.$watch(d.ngModel,function(){null!=f&&null!=d.watchEquals&&e.$setValidity("watchEquals",a.equals(f,d.watchEquals))}),d.$observe("watchEquals",function(){null!=f&&null!=d.watchEquals&&e.$setValidity("watchEquals",a.equals(f,d.watchEquals))})}}}}]);
{
"name": "angular.validators",
"version": "4.0.7",
"version": "4.2.1",
"description": "Angular validation directives using validator.js",

@@ -5,0 +5,0 @@ "main": "./angular.validators.js",

{
"name": "angular.validators",
"version": "4.0.7",
"version": "4.2.1",
"license": "MIT",

@@ -5,0 +5,0 @@ "devDependencies": {

@@ -147,2 +147,4 @@ [![npm version](https://badge.fury.io/js/angular.validators.svg)](http://badge.fury.io/js/angular.validators)

v4.2.1 - It's been a long time, updated to version 4.2.1
v4.0.6 - reverted back to code from v4.0.2 since v4.0.3 & v4.0.4 where riddled with bugs.

@@ -149,0 +151,0 @@

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc