775ac7b58c
you must login with an BTP account in order to see the app
74 lines
No EOL
1.7 KiB
JavaScript
74 lines
No EOL
1.7 KiB
JavaScript
import assertString from './util/assertString';
|
|
import merge from './util/merge';
|
|
var default_fqdn_options = {
|
|
require_tld: true,
|
|
allow_underscores: false,
|
|
allow_trailing_dot: false,
|
|
allow_numeric_tld: false,
|
|
allow_wildcard: false
|
|
};
|
|
export default function isFQDN(str, options) {
|
|
assertString(str);
|
|
options = merge(options, default_fqdn_options);
|
|
/* Remove the optional trailing dot before checking validity */
|
|
|
|
if (options.allow_trailing_dot && str[str.length - 1] === '.') {
|
|
str = str.substring(0, str.length - 1);
|
|
}
|
|
/* Remove the optional wildcard before checking validity */
|
|
|
|
|
|
if (options.allow_wildcard === true && str.indexOf('*.') === 0) {
|
|
str = str.substring(2);
|
|
}
|
|
|
|
var parts = str.split('.');
|
|
var tld = parts[parts.length - 1];
|
|
|
|
if (options.require_tld) {
|
|
// disallow fqdns without tld
|
|
if (parts.length < 2) {
|
|
return false;
|
|
}
|
|
|
|
if (!/^([a-z\u00A1-\u00A8\u00AA-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}|xn[a-z0-9-]{2,})$/i.test(tld)) {
|
|
return false;
|
|
} // disallow spaces
|
|
|
|
|
|
if (/\s/.test(tld)) {
|
|
return false;
|
|
}
|
|
} // reject numeric TLDs
|
|
|
|
|
|
if (!options.allow_numeric_tld && /^\d+$/.test(tld)) {
|
|
return false;
|
|
}
|
|
|
|
return parts.every(function (part) {
|
|
if (part.length > 63) {
|
|
return false;
|
|
}
|
|
|
|
if (!/^[a-z_\u00a1-\uffff0-9-]+$/i.test(part)) {
|
|
return false;
|
|
} // disallow full-width chars
|
|
|
|
|
|
if (/[\uff01-\uff5e]/.test(part)) {
|
|
return false;
|
|
} // disallow parts starting or ending with hyphen
|
|
|
|
|
|
if (/^-|-$/.test(part)) {
|
|
return false;
|
|
}
|
|
|
|
if (!options.allow_underscores && /_/.test(part)) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
});
|
|
} |