Files
certimate/ui/src/utils/validators.ts
2025-06-12 14:03:29 +08:00

53 lines
1.3 KiB
TypeScript

import { z } from "zod";
import { validCronExpression as _validCronExpression } from "./cron";
export const validCronExpression = (value: string) => {
return _validCronExpression(value);
};
export const validDomainName = (value: string, { allowWildcard = false }: { allowWildcard?: boolean } = {}) => {
const re = allowWildcard ? /^(?:\*\.)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{1,}$/ : /^(?!-)[A-Za-z0-9-]{1,}(?<!-)(\.[A-Za-z0-9-]{1,}(?<!-)){0,}$/;
return re.test(value);
};
export const validEmailAddress = (value: string) => {
try {
z.string().email().parse(value);
return true;
} catch (_) {
return false;
}
};
export const validIPv4Address = (value: string) => {
try {
z.string().ip({ version: "v4" }).parse(value);
return true;
} catch (_) {
return false;
}
};
export const validIPv6Address = (value: string) => {
try {
z.string().ip({ version: "v6" }).parse(value);
return true;
} catch (_) {
return false;
}
};
export const validHttpOrHttpsUrl = (value: string) => {
try {
const url = new URL(value);
return url.protocol === "http:" || url.protocol === "https:";
} catch {
return false;
}
};
export const validPortNumber = (value: string | number) => {
return parseInt(value + "") === +value && String(+value) === String(value) && +value >= 1 && +value <= 65535;
};