Package Exports
- @miyax/validatorjs
- @miyax/validatorjs/array
- @miyax/validatorjs/contextual
- @miyax/validatorjs/core
- @miyax/validatorjs/date
- @miyax/validatorjs/file
- @miyax/validatorjs/number
- @miyax/validatorjs/string
- @miyax/validatorjs/utility
Readme
@miyax/validatorjs
Una librería de validación JavaScript potente y flexible, inspirada en las reglas de validación de Laravel.
📦 Instalación
npm install @miyax/validatorjs
yarn add @miyax/validatorjs
🚀 Ejemplo de Uso
import { validate } from '@miyax/validatorjs';
// Datos del formulario
const userData = {
name: 'Juan Pérez',
email: 'juan@example.com',
age: 28,
password: 'miPassword123'
};
// Reglas de validación
const rules = {
name: 'required|string|min:2|max:50',
email: 'required|email',
age: 'required|numeric|min:18|max:99',
password: 'required|string|min:8'
};
// Validar
const result = validate(userData, rules);
if (result.valid) {
console.log('✅ Usuario válido');
} else {
console.log('❌ Errores encontrados:');
result.errors.forEach(error => {
console.log(` • ${error.field}: ${error.message}`);
});
}
📋 Reglas Implementadas
Reglas de Texto
alpha
- Solo letras (a-zA-Z)alpha_num
- Letras y númerosalpha_dash
- Letras, números, guiones y guiones bajosascii
- Solo caracteres ASCIIemail
- Email válidojson
- JSON válidolowercase
- Solo minúsculasuppercase
- Solo mayúsculasstring
- Debe ser stringurl
- URL válidauuid
- UUID válidohex_color
- Color hexadecimalstarts_with:value
- Comienza con valorends_with:value
- Termina con valordoesnt_start_with:value
- No comienza con valordoesnt_end_with:value
- No termina con valorregex:pattern
- Coincide con expresión regularnot_regex:pattern
- No coincide con expresión regular
Reglas Numéricas
numeric
- Número válidointeger
- Número enterodecimal:min,max
- Decimales (min-max lugares)digits:value
- Exactamente N dígitosdigits_between:min,max
- Entre min y max dígitosmin_digits:value
- Mínimo N dígitosmax_digits:value
- Máximo N dígitosmultiple_of:value
- Múltiplo de valorgreater_than:value
- Mayor que valorgreater_than_or_equal:value
- Mayor o igual que valorless_than:value
- Menor que valorless_than_or_equal:value
- Menor o igual que valor
Reglas de Arrays
array
- Debe ser arraydistinct
- Elementos únicoscontains:value
- Contiene valordoesnt_contain:value
- No contiene valorin_array:field
- Valor está en array del campoin:val1,val2,val3
- Valor está en listanot_in:val1,val2,val3
- Valor no está en lista
Reglas de Fechas
date
- Fecha válidadate_format:format
- Formato de fecha específicobefore:date
- Antes de fechabefore_or_equal:date
- Antes o igual a fechaafter:date
- Después de fechaafter_or_equal:date
- Después o igual a fechadate_equals:date
- Igual a fechatimezone
- Zona horaria válida
Reglas de Archivos
file
- Debe ser archivoimage
- Debe ser imagenmimes:jpg,png
- Tipos MIME permitidosmimetypes:image/*
- Categorías MIME permitidasextensions:jpg,png
- Extensiones permitidasdimensions
- Validación de dimensiones de imagen
Reglas Contextuales
min:value
- Valor/tamaño mínimomax:value
- Valor/tamaño máximobetween:min,max
- Entre dos valores/tamañossize:value
- Tamaño exactosame:field
- Igual a otro campodifferent:field
- Diferente a otro campo
Reglas Utilitarias
required
- Campo obligatoriorequired_if:field,value
- Obligatorio si otro campo tiene valorfilled
- No vacío (si está presente)nullable
- Permite valores nullboolean
- Valor booleanopresent
- Debe estar presentepresent_if:field,value
- Presente si otro campo tiene valormissing
- No debe estar presentemissing_if:field,value
- Ausente si otro campo tiene valorsometimes
- Validar solo si está presente
Validator
Class
import { Validator } from '@miyax/validatorjs/core';
const validator = new Validator();
// Métodos disponibles
validator.validate(data, rules, options);
validator.addRule(name, validatorFn, message);
validator.setMessages(messages);
validator.passes(data, rules);
validator.fails(data, rules);
createValidator()
Helper
import { createValidator } from '@miyax/validatorjs';
const validator = createValidator();
// Equivalente a: new Validator()
🚀 Ejemplos de Frameworks
React
import React, { useState } from 'react';
import { validate } from '@miyax/validatorjs';
function ContactForm() {
const [formData, setFormData] = useState({
name: '',
email: '',
message: ''
});
const [errors, setErrors] = useState({});
const handleSubmit = (e) => {
e.preventDefault();
const rules = {
name: 'required|string|min:2',
email: 'required|email',
message: 'required|string|min:10'
};
const result = validate(formData, rules);
if (result.valid) {
// Enviar formulario
console.log('Enviando...', formData);
setErrors({});
} else {
// Mostrar errores
const errorMap = {};
result.errors.forEach(error => {
errorMap[error.field] = error.message;
});
setErrors(errorMap);
}
};
return (
<form onSubmit={handleSubmit}>
<input
type="text"
placeholder="Nombre"
value={formData.name}
onChange={(e) => setFormData({...formData, name: e.target.value})}
/>
{errors.name && <span className="error">{errors.name}</span>}
{/* Más campos... */}
<button type="submit">Enviar</button>
</form>
);
}
Vue 3
<template>
<form @submit.prevent="handleSubmit">
<input
v-model="form.email"
type="email"
placeholder="Email"
:class="{ error: errors.email }"
/>
<span v-if="errors.email" class="error-text">{{ errors.email }}</span>
<button type="submit">Enviar</button>
</form>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { validate } from '@miyax/validatorjs';
const form = reactive({
email: '',
password: ''
});
const errors = ref({});
const handleSubmit = () => {
const rules = {
email: 'required|email',
password: 'required|string|min:8'
};
const result = validate(form, rules);
if (result.valid) {
// Procesar formulario
console.log('Formulario válido');
errors.value = {};
} else {
// Mostrar errores
errors.value = result.errors.reduce((acc, error) => {
acc[error.field] = error.message;
return acc;
}, {});
}
};
</script>
🤔 FAQ
¿Cómo agregar mensajes en español?
import { Validator } from '@miyax/validatorjs';
const validator = new Validator();
validator.setMessages({
required: 'El campo :attribute es obligatorio',
email: 'El campo :attribute debe ser un email válido',
min: 'El campo :attribute debe tener al menos :param caracteres',
max: 'El campo :attribute no puede tener más de :param caracteres'
});
¿Cómo validar formularios anidados?
import { validate } from '@miyax/validatorjs';
// Ejemplo completo con validación de objetos anidados
const formData = {
personal: {
firstName: 'Juan',
lastName: 'Pérez',
contact: {
email: 'juan@example.com',
phone: '+34123456789'
}
},
preferences: {
newsletter: true,
theme: 'dark'
}
};
const rules = {
'personal.firstName': 'required|string|min:2',
'personal.lastName': 'required|string|min:2',
'personal.contact.email': 'required|email',
'personal.contact.phone': 'required|string|min:9',
'preferences.newsletter': 'required|boolean',
'preferences.theme': 'required|in:light,dark,auto'
};
const result = validate(formData, rules);
// El resultado incluirá errores específicos con rutas completas
if (!result.valid) {
result.errors.forEach(error => {
console.log(`Error en ${error.field}: ${error.message}`);
});
}
¿Funciona con async/await?
async function validateAsync(data, rules) {
// La validación es síncrona, pero puedes usar en contexto async
const result = validate(data, rules);
if (result.valid) {
// Continuar con operaciones async
await saveToDatabase(data);
}
return result;
}
🤝 Contribuir
¡Las contribuciones son bienvenidas!
- Fork el proyecto
- Crea una rama:
git checkout -b feature/nueva-regla
- Commit:
git commit -m 'Agregar nueva regla de validación'
- Push:
git push origin feature/nueva-regla
- Abre un Pull Request
🚀 ¡Hecho con ❤️ para la comunidad JavaScript!