// 通用表单校验 // Logan.Li export function isNotEmpty(value: unknown): boolean { if (value === null || value === undefined) return false; return String(value).trim().length > 0; } export function isValidPort(port: unknown): boolean { const n = Number(port); return Number.isInteger(n) && n > 0 && n <= 65535; } export function isValidIPv4(ip: string): boolean { const parts = ip.trim().split('.'); if (parts.length !== 4) return false; return parts.every((p) => { const n = Number(p); return Number.isInteger(n) && n >= 0 && n <= 255 && String(n) === p; }); } export function isValidHostname(host: string): boolean { const h = host.trim(); if (!h) return false; return /^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(h); } export function isValidUrl(url: string): boolean { try { const u = new URL(url); return u.protocol === 'http:' || u.protocol === 'https:'; } catch { return false; } } export function parsePortList(text: string): number[] { return text .split(',') .map((s) => parseInt(s.trim(), 10)) .filter((n) => isValidPort(n)); }