src/validators.ts873 B · typescript
import { StringSchema } from './types';
const EMAIL_REGEX = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
const URL_REGEX = /^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([\/\w .-]*)*\/?$/;
const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
const DATE_REGEX = /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{3})?Z?)?$/;
export const validators = {
email: (val: string) => EMAIL_REGEX.test(val),
url: (val: string) => URL_REGEX.test(val),
uuid: (val: string) => UUID_REGEX.test(val),
date: (val: string) => DATE_REGEX.test(val) && !isNaN(Date.parse(val))
};
export function validateStringFormat(value: string, format: StringSchema['format']): string | null {
if (!format) return null;
const validator = validators[format];
if (validator && !validator(value)) {
return `Invalid ${format} format`;
}
return null;
}