Real-World Validation PatternsLesson 5.5
Building a reusable regex validation library in JavaScript
module pattern, compiled regex constants, validate function, error messages, chaining validators, TypeScript types optional
One File, All Your Validators
Compiling regex once at module load time is faster than recompiling on every call.
// validators.js
const PATTERNS = {
email: /^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$/,
phone: /^\(?\d{3}\)?[\s.\-]?\d{3}[\s.\-]?\d{4}$/,
zip: /^\d{5}(-\d{4})?$/,
url: /^https?:\/\/[\w.\-]+(?:\/[^\s]*)?$/i,
};
export function validate(field, value) {
const pattern = PATTERNS[field];
if (!pattern) throw new Error(`Unknown field: ${field}`);
return pattern.test(value.trim()) ? null : MESSAGES[field];
}
