validatable
Version:
A library for synchronous and asynchronous input validation.
42 lines (41 loc) • 1.46 kB
JavaScript
;
exports.__esModule = true;
var typeable_1 = require("typeable");
function stringFQDN(value, options) {
if (options === void 0) { options = {}; }
var _a = options.requireTld, requireTld = _a === void 0 ? true : _a, _b = options.allowUnderscores, allowUnderscores = _b === void 0 ? false : _b, _c = options.allowTrailingDot, allowTrailingDot = _c === void 0 ? false : _c;
if (!typeable_1.isString(value))
return false;
if (allowTrailingDot && value[value.length - 1] === '.') {
value = value.substring(0, value.length - 1);
}
var parts = value.split('.');
if (requireTld) {
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 = void 0, i = 0; i < parts.length; i++) {
part = parts[i];
if (allowUnderscores) {
if (part.indexOf('__') >= 0) {
return false;
}
else {
part = part.replace(/_/g, '');
}
}
if (!/^[a-z\u00a1-\uffff0-9-]+$/i.test(part)) {
return false;
}
else if (/[\uff01-\uff5e]/.test(part)) {
return false; // disallow full-width chars
}
else if (part[0] === '-' || part[part.length - 1] === '-') {
return false;
}
}
return true;
}
exports.stringFQDN = stringFQDN;