@yazouv/form-validator
v0.1.4
Published
A simple TypeScript form validation library
Maintainers
Readme
@yazouv/form-validator
A lightweight, TypeScript-based form validation library with a simple and intuitive API.
Features
- 🚀 Lightweight - Minimal dependencies, small bundle size
- 📝 TypeScript - Full TypeScript support with type definitions
- 🔧 Simple API - Easy to use pipe-based rule syntax
- ⚡ Fast - Efficient validation with early returns
- 🎯 Flexible - Combine multiple validation rules easily
- 🔌 Extensible - Built-in rules cover most common use cases
Installation
npm install @yazouv/form-validatorQuick Start
import { validate } from "@yazouv/form-validator";
// Define your data
const formData = {
name: "John Doe",
email: "[email protected]",
age: "25",
};
// Define validation rules
const rules = {
name: "required",
email: "required|email",
age: "required|number|min:18",
};
// Validate
const result = validate(formData, rules);
if (result.valid) {
console.log("✅ Form is valid!");
} else {
console.log("❌ Validation errors:", result.errors);
}Available Validation Rules
Basic Rules
| Rule | Description | Example |
| ---------- | ----------------------- | ------------ |
| required | Field must not be empty | "required" |
| email | Valid email format | "email" |
| number | Must be a valid number | "number" |
| link | Valid URL format | "link" |
Numeric Rules
| Rule | Description | Example |
| -------------- | ------------- | ------------------ |
| min:X | Minimum value | "min:18" |
| max:X | Maximum value | "max:65" |
| min:X\|max:Y | Value range | "min:18\|max:65" |
String Rules
| Rule | Description | Example |
| --------------- | ------------------------------------------------- | --------------------- |
| slug | URL-friendly format (lowercase, numbers, hyphens) | "slug" |
| regex:pattern | Custom regex pattern | "regex:^[A-Z]{2,}$" |
Combining Rules
Use the pipe (|) character to combine multiple rules:
const rules = {
username: "required|slug",
email: "required|email",
age: "required|number|min:18|max:99",
website: "link", // Optional field
password: "required|regex:^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d).{8,}$",
};Examples
Basic Form Validation
import { validate } from "@yazouv/form-validator";
const userData = {
firstName: "John",
lastName: "Doe",
email: "[email protected]",
age: "28",
};
const rules = {
firstName: "required",
lastName: "required",
email: "required|email",
age: "required|number|min:18",
};
const result = validate(userData, rules);
// { valid: true, errors: {} }Handling Validation Errors
const invalidData = {
firstName: "",
email: "invalid-email",
age: "15",
};
const result = validate(invalidData, rules);
if (!result.valid) {
// Handle each field's errors
Object.entries(result.errors).forEach(([field, errors]) => {
console.log(`${field}: ${errors.join(", ")}`);
});
}
// Output:
// firstName: This field is required
// email: Invalid email format
// age: Must be at least 18Advanced Examples
User Registration Form
const registrationData = {
username: "john-doe",
email: "[email protected]",
password: "MySecurePass123",
age: "25",
website: "https://johndoe.com",
};
const registrationRules = {
username: "required|slug",
email: "required|email",
password: "required|regex:^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d).{8,}$",
age: "required|number|min:18",
website: "link", // Optional
};
const result = validate(registrationData, registrationRules);E-commerce Product Form
const productData = {
name: "Gaming Laptop",
price: "999.99",
category: "electronics",
description: "High-performance gaming laptop",
};
const productRules = {
name: "required",
price: "required|number|min:0",
category: "required|slug",
description: "required|max:500",
};Contact Form with Phone Validation
const contactData = {
name: "Jane Smith",
email: "[email protected]",
phone: "+1234567890",
message: "Hello, I'm interested in your services.",
};
const contactRules = {
name: "required",
email: "required|email",
phone: "regex:^\\+?[1-9]\\d{1,14}$",
message: "required|min:10|max:1000",
};API Reference
validate(data, rules)
Validates an object against a set of rules.
Parameters:
data(object): The data object to validaterules(object): Object defining validation rules for each field
Returns:
{ valid: boolean, errors: object }- Validation result
Example:
const result = validate(
{ email: "[email protected]" },
{ email: "required|email" }
);
// { valid: true, errors: {} }Error Messages
The library provides clear, user-friendly error messages:
- required: "This field is required"
- email: "Invalid email format"
- number: "Must be a number"
- link: "This field must be a valid URL"
- min:X: "Must be at least X"
- max:X: "Must be at most X"
- slug: "Invalid format"
- regex: "Invalid format"
TypeScript Support
Full TypeScript support with proper type definitions:
interface ValidationResult {
valid: boolean;
errors: Record<string, string[]>;
}
function validate(
data: Record<string, any>,
rules: Record<string, string>
): ValidationResult;Contributing
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Support
If you find this package useful, please consider giving it a ⭐ on GitHub!
For issues and feature requests, please use the GitHub Issues page.
