franciscoblancojn / composer-validator
Libreria para validar datos
v1.0.4
2025-09-01 22:02 UTC
README
Una librería de validación flexible y fácil de usar para PHP que permite definir reglas de validación de forma fluida y encadenable.
Características
- ✅ Validaciones fluidas: Encadena múltiples reglas de validación
- 🎯 Mensajes personalizables: Define tus propios mensajes de error
- 🔧 Flexible: Valida strings, números, arrays, objetos y más
- 📧 Validaciones comunes: Email, fechas, regex, enum
- 🏗️ Esquemas complejos: Valida arrays y objetos anidados
- 🚀 Fácil de usar: Sintaxis intuitiva y documentada
Instalación
Via Composer (Recomendado)
composer require franciscoblancojn/validator
Instalación Manual
Descarga el archivo FValidator.php
e inclúyelo en tu proyecto:
require_once 'path/to/FValidator.php';
Uso Básico
Validación Simple
<?php use franciscoblancojn\validator\FValidator; // Crear un validador $validator = FValidator("email") ->isRequired() ->isEmail(); try { $validator->validate("usuario@ejemplo.com"); // ✅ Válido echo "Email válido!"; } catch (Exception $e) { echo "Error: " . $e->getMessage(); // ❌ Mostrar error }
Validación de Números
$ageValidator = FValidator("edad") ->isRequired() ->isNumber() ->isMin(18, "Debe ser mayor de 18 años") ->isMax(120, "Edad no válida"); try { $ageValidator->validate(25); // ✅ Válido } catch (Exception $e) { echo $e->getMessage(); }
Validación de Strings
$usernameValidator = FValidator("username") ->isRequired() ->isString() ->isLength(5, "El nombre de usuario debe tener exactamente 5 caracteres") ->isRegex('/^[a-zA-Z0-9_]+$/', "Solo se permiten letras, números y guiones bajos"); try { $usernameValidator->validate("user1"); // ✅ Válido } catch (Exception $e) { echo $e->getMessage(); }
Validaciones Disponibles
Tipos Básicos
Método | Descripción | Ejemplo |
---|---|---|
isRequired($message) |
Campo obligatorio | ->isRequired("Este campo es requerido") |
isString($message) |
Debe ser string | ->isString("Debe ser texto") |
isNumber($message) |
Debe ser numérico | ->isNumber("Debe ser un número") |
isBoolean($message) |
Debe ser booleano | ->isBoolean("Debe ser true/false") |
Validaciones Específicas
Método | Descripción | Ejemplo |
---|---|---|
isEmail($message) |
Email válido | ->isEmail("Email inválido") |
isDate($message) |
Fecha válida | ->isDate("Fecha inválida") |
isRegex($pattern, $message) |
Coincide con regex | ->isRegex('/^\d+$/', "Solo números") |
isEnum($values, $message) |
Valor dentro del enum | ->isEnum(['S', 'M', 'L'], "Talla inválida") |
Validaciones Numéricas
Método | Descripción | Ejemplo |
---|---|---|
isMin($min, $message) |
Valor mínimo | ->isMin(0, "Debe ser positivo") |
isMax($max, $message) |
Valor máximo | ->isMax(100, "Máximo 100") |
isEqual($value, $message) |
Igual a valor | ->isEqual(42, "Debe ser 42") |
isLength($length, $message) |
Longitud exacta | ->isLength(10, "Debe tener 10 caracteres") |
Validaciones Complejas
Validación de Arrays
// Validar array de números $numbersValidator = FValidator("numeros") ->isArray( FValidator()->isNumber()->isMin(1, "Debe ser mayor que 1"), "Debe ser un array" ); try { $numbersValidator->validate([1, 2, 3, 4]); // ✅ Válido } catch (Exception $e) { echo $e->getMessage(); }
Validación de Objetos
// Schema para validar un usuario $userSchema = [ 'name' => FValidator()->isRequired()->isString(), 'email' => FValidator()->isRequired()->isEmail(), 'age' => FValidator()->isRequired()->isNumber()->isMin(18) ]; $userValidator = FValidator("usuario") ->isObject($userSchema, "Debe ser un objeto válido"); $userData = [ 'name' => 'Juan Pérez', 'email' => 'juan@ejemplo.com', 'age' => 30 ]; try { $userValidator->validate($userData); // ✅ Válido } catch (Exception $e) { echo $e->getMessage(); }
Validación de Arrays de Objetos
// Validar array de usuarios $userSchema = [ 'name' => FValidator()->isRequired()->isString(), 'email' => FValidator()->isRequired()->isEmail() ]; $usersValidator = FValidator("usuarios") ->isArray( FValidator()->isObject($userSchema), "Debe ser un array de usuarios" ); $users = [ ['name' => 'Juan', 'email' => 'juan@test.com'], ['name' => 'María', 'email' => 'maria@test.com'] ]; try { $usersValidator->validate($users); // ✅ Válido } catch (Exception $e) { echo $e->getMessage(); }
Ejemplos Prácticos
Validación de Formulario de Registro
function validateRegistrationForm($data) { $validator = FValidator("Formuario")->isObject([ 'username' => FValidator("nombre de usuario") ->isRequired() ->isString() ->isRegex('/^[a-zA-Z0-9_]{3,20}$/', "3-20 caracteres, solo letras, números y _"), 'email' => FValidator("email") ->isRequired() ->isEmail(), 'password' => FValidator("contraseña") ->isRequired() ->isString() ->isRegex('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d@$!%*?&]{8,}$/', "Mínimo 8 caracteres, incluye mayúscula, minúscula y número"), 'age' => FValidator("edad") ->isRequired() ->isNumber() ->isMin(13, "Debe ser mayor de 13 años") ->isMax(120, "Edad inválida"), 'gender' => FValidator("género") ->isEnum(['M', 'F', 'O'], "Género no válido") ]); return $validator->validate($value); } // Uso $formData = [ 'username' => 'juan123', 'email' => 'juan@ejemplo.com', 'password' => 'MiPassword123', 'age' => 25, 'gender' => 'M' ]; $result = validateRegistrationForm($formData); if ($result === true) { echo "Formulario válido!"; } else { print_r($result); // Array con errores }
Validación de API Response
function validateApiResponse($response) { $schema = [ 'status' => FValidator()->isRequired()->isEnum(['success', 'error']), 'data' => FValidator()->isRequired()->isArray( FValidator()->isObject([ 'id' => FValidator()->isRequired()->isNumber(), 'title' => FValidator()->isRequired()->isString(), 'published_at' => FValidator()->isRequired()->isDate() ]) ), 'meta' => FValidator()->isObject([ 'total' => FValidator()->isNumber(), 'page' => FValidator()->isNumber()->isMin(1) ]) ]; $validator = FValidator("response")->isObject($schema); try { $validator->validate($response); return true; } catch (Exception $e) { throw new Exception("Invalid API response: " . $e->getMessage()); } }
API Reference
Constructor
FValidator(?string $name = null)
Crea una nueva instancia del validador con un nombre opcional para el campo.
Métodos de Configuración
setName(string $name): self
- Establece el nombre del camposetData($data): self
- Establece los datos a validar
Método de Validación
validate($data): bool
- Ejecuta todas las validaciones. Retornatrue
si es válido, lanzaException
si no.
Manejo de Errores
La librería lanza excepciones cuando las validaciones fallan. Siempre usa bloques try-catch
:
try { $validator->validate($data); // Procesamiento exitoso } catch (Exception $e) { // Manejar error error_log("Validation error: " . $e->getMessage()); // Mostrar mensaje al usuario }
Contribuir
Las contribuciones son bienvenidas! Por favor:
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/nueva-validacion
) - Commit tus cambios (
git commit -m 'Agregar nueva validación'
) - Push a la rama (
git push origin feature/nueva-validacion
) - Abre un Pull Request
Licencia
Este proyecto está bajo la Licencia MIT.
Autor
Francisco Blanco JN
- GitHub: @franciscoblancojn
Changelog
v1.0.0
- ✨ Primera versión estable
- 🎯 Validaciones básicas (string, number, boolean, array, object)
- 📧 Validaciones específicas (email, date, regex, enum)
- 🔧 Validaciones numéricas (min, max, equal, length)
- 🏗️ Soporte para esquemas complejos
¿Encontraste un bug o tienes una sugerencia? Abre un issue en GitHub.