java-bean-validation.js
Version:
Java Bean Validation implementation for JavaScript
76 lines • 3.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var core_1 = require("../core/core");
function registerStricterEmailValidator(punycodeToASCII) {
core_1.VALIDATORS['Email'] = function EmailValidator(value) {
if (value === null || value === undefined) {
return true;
}
if (typeof value === 'number') {
value = value + '';
}
if (value instanceof Date) {
value = value + '';
}
if (typeof value !== 'string') {
return true;
}
return isValid(value);
};
var CASE_INSENSITIVE = "i";
var LOCAL_PART_ATOM = "[a-z0-9!#$%&'*+/=?^_`{|}~\u0080-\uFFFF-]";
var LOCAL_PART_INSIDE_QUOTES_ATOM = "([a-z0-9!#$%&'*.(),<>\\[\\]:; @+/=?^_`{|}~\u0080-\uFFFF-]|\\\\\\\\|\\\\\\\")";
var DOMAIN_LABEL = "[a-z0-9!#$%&'*+/=?^_`{|}~-]";
var DOMAIN = DOMAIN_LABEL + "+(\\." + DOMAIN_LABEL + "+)*";
var IP_DOMAIN = "\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\]";
var IP_V6_DOMAIN = "(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))";
var MAX_LOCAL_PART_LENGTH = 64;
var MAX_DOMAIN_PART_LENGTH = 255;
var LOCAL_PART_PATTERN = new RegExp("^" +
"(" + LOCAL_PART_ATOM + "+|\"" + LOCAL_PART_INSIDE_QUOTES_ATOM + "+\")" +
"(\\." + "(" + LOCAL_PART_ATOM + "+|\"" + LOCAL_PART_INSIDE_QUOTES_ATOM + "+\")" + ")*"
+ "$", CASE_INSENSITIVE);
var DOMAIN_PATTERN = new RegExp("^" +
DOMAIN + "|" + IP_DOMAIN + "|" + "\\[IPv6:" + IP_V6_DOMAIN + "\\]"
+ "$", CASE_INSENSITIVE);
function isValid(value) {
if (value === null || value === undefined || value.length === 0) {
return true;
}
var stringValue = value;
var splitPosition = stringValue.lastIndexOf("@");
if (splitPosition < 0) {
return false;
}
var localPart = stringValue.substring(0, splitPosition);
var domainPart = stringValue.substring(splitPosition + 1);
if (!matchLocalPart(localPart)) {
return false;
}
return matchDomain(domainPart);
}
function matchLocalPart(localPart) {
if (localPart.length > MAX_LOCAL_PART_LENGTH) {
return false;
}
return LOCAL_PART_PATTERN.test(localPart);
}
function matchDomain(domain) {
if (domain.lastIndexOf(".") === domain.length) {
return false;
}
var asciiString;
try {
asciiString = punycodeToASCII(domain);
}
catch (e) {
return false;
}
if (asciiString.length > MAX_DOMAIN_PART_LENGTH) {
return false;
}
return DOMAIN_PATTERN.test(asciiString);
}
}
exports.registerStricterEmailValidator = registerStricterEmailValidator;
//# sourceMappingURL=stricterEmailValidator.js.map