34 lines
706 B
TypeScript
34 lines
706 B
TypeScript
export function isValidHostname(value: string | null | undefined) {
|
|
if (typeof value !== "string") return false;
|
|
|
|
const validHostnameChars = /^[a-zA-Z0-9-.]{1,253}\.?$/g;
|
|
|
|
if (!validHostnameChars.test(value)) {
|
|
return false;
|
|
}
|
|
|
|
if (value.endsWith(".")) {
|
|
value = value.slice(0, value.length - 1);
|
|
}
|
|
|
|
if (value.length > 253) {
|
|
return false;
|
|
}
|
|
|
|
const labels = value.split(".");
|
|
|
|
const isValid = labels.every(function (label) {
|
|
const validLabelChars = /^([a-zA-Z0-9-]+)$/g;
|
|
|
|
const validLabel =
|
|
validLabelChars.test(label) &&
|
|
label.length < 64 &&
|
|
!label.startsWith("-") &&
|
|
!label.endsWith("-");
|
|
|
|
return validLabel;
|
|
});
|
|
|
|
return isValid;
|
|
}
|