mirror of
https://github.com/itdoginfo/podkop.git
synced 2026-05-23 12:49:50 +03:00
32 lines
876 B
TypeScript
32 lines
876 B
TypeScript
import { ValidationResult } from './types';
|
|
|
|
export function validateDomain(
|
|
domain: string,
|
|
allowDotTLD = false,
|
|
): ValidationResult {
|
|
const domainRegex =
|
|
/^(?=.{1,253}(?:\/|$))(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)\.)+(?:[a-zA-Z]{2,}|xn--[a-zA-Z0-9-]{1,59}[a-zA-Z0-9])(?:\/[^\s]*)?$/;
|
|
|
|
if (allowDotTLD) {
|
|
const dotTLD = /^\.[a-zA-Z]{2,}$/;
|
|
if (dotTLD.test(domain)) {
|
|
return { valid: true, message: _('Valid') };
|
|
}
|
|
}
|
|
|
|
if (!domainRegex.test(domain)) {
|
|
return { valid: false, message: _('Invalid domain address') };
|
|
}
|
|
|
|
const hostname = domain.split('/')[0];
|
|
const parts = hostname.split('.');
|
|
|
|
const atLeastOneInvalidPart = parts.some((part) => part.length > 63);
|
|
|
|
if (atLeastOneInvalidPart) {
|
|
return { valid: false, message: _('Invalid domain address') };
|
|
}
|
|
|
|
return { valid: true, message: _('Valid') };
|
|
}
|