orumad/laravel-spanish-validator
Install the package:
composer require orumad/laravel-spanish-validator
Publish config (optional):
php artisan vendor:publish --provider="Orumad\SpanishValidator\SpanishValidatorServiceProvider" --tag="config"
(Default config works out-of-the-box, but publishing allows customization of regex patterns or error messages.)
First use case: Validate a NIF in a Laravel request:
use Orumad\SpanishValidator\Rules\Nif;
$request->validate([
'nif' => ['required', new Nif],
]);
vendor/orumad/laravel-spanish-validator/src/Rules/ (e.g., Nif.php, Nie.php).config/spanish-validator.php (after publishing).tests/ for edge-case examples (e.g., invalid formats, special characters).Form Validation:
$request->validate([
'tax_id' => ['required', new \Orumad\SpanishValidator\Rules\Cif],
'phone' => ['required', 'spanish_phone'],
]);
(Use string aliases like spanish_nif, spanish_iban for cleaner code.)
Manual Validation:
use Orumad\SpanishValidator\Rules\Nss;
$validator = new Nss;
if ($validator->passes('12345678A')) {
// Valid NSS
}
Custom Error Messages:
$request->validate([
'nie' => ['required', new \Orumad\SpanishValidator\Rules\Nie, 'custom.message'],
], [
'custom.message' => 'The :attribute must be a valid NIE (e.g., X1234567Z).',
]);
$validator = Validator::make($request->all(), [
'postal_code' => ['required', 'spanish_postal_code'],
]);
if ($validator->fails()) {
return response()->json(['errors' => $validator->errors()], 422);
}
FormRequest or Model validation:
public function rules()
{
return [
'nss' => ['required', new \Orumad\SpanishValidator\Rules\Nss],
];
}
public function handle($request, Closure $next)
{
if ($request->routeIs('tax-registration') && !$request->hasValid('cif')) {
abort(422, 'Invalid CIF provided.');
}
return $next($request);
}
$nifs = ['12345678A', '98765432B'];
$valid = collect($nifs)->every(fn($nif) => (new \Orumad\SpanishValidator\Rules\Nif)->passes($nif));
// resources/lang/es/validation.php
'spanish_nif' => 'El :attribute debe ser un NIF válido (ej. 12345678A).',
Case Sensitivity:
A, B) are case-insensitive in validation but must match the input’s case for strict checks. Use strtoupper() if consistency is critical:
$nif = strtoupper($request->nif);
CIF Quirks:
A–J (natural persons) or P (entities). The validator checks this, but false positives may occur with malformed inputs (e.g., 123456789).$request->validate([
'cif' => ['required', 'string', 'min:9', new \Orumad\SpanishValidator\Rules\Cif],
]);
IBAN Edge Cases:
ES). The validator enforces this, but copy-pasted IBANs (e.g., with spaces) will fail.$iban = preg_replace('/\s+/', '', $request->iban);
Postal Code Ambiguity:
28001) are 5 digits, but some regions use 4 digits (e.g., 38001 for Canary Islands). The validator uses a strict regex by default.$validator = new \Orumad\SpanishValidator\Rules\PostalCode;
$validator->setRegex('/^\d{4,5}$/'); // Relaxed validation
Phone Number Variability:
+34, 0034, or no prefix. The validator accepts all formats but may reject valid numbers if the config’s prefix option is misconfigured.'phone' => [
'prefix' => '+34', // or null to allow all prefixes
],
$validator = Validator::make($data, ['nif' => new \Orumad\SpanishValidator\Rules\Nif]);
\Log::debug('Validation errors:', $validator->errors()->toArray());
// Example: Test NIE with letters Y, Z (valid for foreigners)
$nieRule = new \Orumad\SpanishValidator\Rules\Nie;
$nieRule->passes('Y1234567Z'); // Should return true
$nifRule = new \Orumad\SpanishValidator\Rules\Nif;
\Log::debug('NIF regex:', $nifRule->getRegex());
Custom Rules:
Extend the base SpanishValidatorRule class to add domain-specific logic:
use Orumad\SpanishValidator\Rules\SpanishValidatorRule;
class CustomNif extends SpanishValidatorRule {
protected function getRegex() {
return '/^[\d]{8}[A-Z]$/'; // Custom pattern
}
}
Override Config: Modify the published config to adjust validation strictness:
// config/spanish-validator.php
'nif' => [
'strict_letter_check' => true, // Enforces letter ranges (e.g., J for NIFs)
],
Add New Validators:
Fork the package and add a new rule (e.g., for DNI or NIE with letters X/Y/Z only):
// src/Rules/NieForeigner.php
class NieForeigner extends SpanishValidatorRule {
protected function getRegex() {
return '/^[XYZ]\d{7}[A-Z]$/';
}
}
Localization: Override error messages in your app’s language files:
// resources/lang/en/validation.php
'spanish_nif' => 'The :attribute must be a valid Spanish NIF (e.g., 12345678A).',
$cachedNifRule = new \Orumad\SpanishValidator\Rules\Nif;
foreach ($nifs as $nif) {
$cachedNifRule->passes($nif);
}
How can I help you explore Laravel packages today?