@stacksjs/ts-validation
Version:
A simple TypeScript starter kit using Bun.
66 lines (52 loc) • 1.44 kB
TypeScript
declare const default_fqdn_options: {
require_tld: true;
allow_underscores: false;
allow_trailing_dot: false;
allow_numeric_tld: false;
allow_wildcard: false;
ignore_max_length: false
};
export default function isFQDN(str: string, options: IsFQDNOptions = {}): boolean {
assertString(str)
options = merge(options, default_fqdn_options)
if (options.allow_trailing_dot && str[str.length - 1] === '.') {
str = str.substring(0, str.length - 1)
}
if (options.allow_wildcard === true && str.indexOf('*.') === 0) {
str = str.substring(2)
}
const parts = str.split('.')
const tld = parts[parts.length - 1]
if (options.require_tld) {
if (parts.length < 2) {
return false
}
if (!options.allow_numeric_tld && !/^(?:[a-z\u00A1-\u00A8\u00AA-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}|xn[a-z0-9-]{2,})$/i.test(tld)) {
return false
}
if (/\s/.test(tld)) {
return false
}
}
if (!options.allow_numeric_tld && /^\d+$/.test(tld)) {
return false
}
return parts.every((part) => {
if (part.length > 63 && !options.ignore_max_length) {
return false
}
if (!/^[\w\u00A1-\uFFFF-]+$/.test(part)) {
return false
}
if (/[\uFF01-\uFF5E]/.test(part)) {
return false
}
if (/^-|-$/.test(part)) {
return false
}
if (!options.allow_underscores && /_/.test(part)) {
return false
}
return true
})
};