53 lines
1.3 KiB
TypeScript
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;
|
|
};
|