danielmrdev/laravel-spanish-validator
Installation:
composer require danielmrdev/laravel-spanish-validator
Publish the config file (if needed):
php artisan vendor:publish --provider="DanielMRDev\SpanishValidator\SpanishValidatorServiceProvider"
First Use Case: Validate a NIF in a Laravel request:
use DanielMRDev\SpanishValidator\Rules\Nif;
$request->validate([
'nif' => ['required', new Nif],
]);
Key Files:
config/spanish-validator.php (customization)vendor/danielmrdev/laravel-spanish-validator/src/Rules/ (rule implementations)Form Request Validation:
use DanielMRDev\SpanishValidator\Rules\{Nif, Nie, Cif, Nss, Ibans, PostalCode, Phone};
public function rules()
{
return [
'tax_id' => ['required', new Nif],
'foreign_id' => ['required', new Nie],
'company_id' => ['required', new Cif],
'ssn' => ['required', new Nss],
'iban' => ['required', new Ibans],
'postal_code' => ['required', new PostalCode],
'phone' => ['required', new Phone],
];
}
Dynamic Rule Application:
$validator = Validator::make($data, [
'id' => function ($attribute, $value, $fail) {
if (str_starts_with($value, 'X')) {
return new Nie;
}
return new Nif;
}
]);
Custom Error Messages:
$request->validate([
'nif' => ['required', new Nif],
], [
'nif.nif' => 'El NIF :attribute no es válido. Ejemplo: 12345678A',
]);
->failedValidation() in controllers to return consistent error formats.use DanielMRDev\SpanishValidator\Rules\Nif;
protected $rules = [
'nif' => ['required', new Nif],
];
$validator = Validator::make($request->all(), [
'nifs.*' => [new Nif],
]);
Case Sensitivity:
A vs a) are case-sensitive in validation. Normalize input:
$nif = strtoupper($request->nif);
CIF Validation Quirks:
A-J (except I). The validator may reject K-Z by default. Override in config:
'cif' => [
'allowed_first_letters' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
],
Phone Number Edge Cases:
+34, 0034, or 34 prefixes. Normalize before validation:
$phone = preg_replace('/[^0-9]/', '', $request->phone);
IBAN Validation:
ext-intl PHP extension. If missing, install:
pecl install intl
Custom Rules: Extend existing rules for complex logic:
use DanielMRDev\SpanishValidator\Rules\Nif as BaseNif;
class CustomNif extends BaseNif {
public function passes($attribute, $value) {
if ($value === 'EXEMPT') return true;
return parent::passes($attribute, $value);
}
}
Logging Failures:
$validator = Validator::make($data, ['nif' => [new Nif]]);
if ($validator->fails()) {
\Log::error('Validation failed for NIF: ' . $validator->errors()->first('nif'));
}
Add Custom Rules:
Create a new rule class extending DanielMRDev\SpanishValidator\Rules\BaseRule and register it in the service provider.
Override Default Config:
Publish and modify config/spanish-validator.php to adjust:
nif_letters).Localization:
Extend error messages in language files (resources/lang/{locale}/validation.php):
'nif' => [
'nif' => 'El NIF :attribute no es válido. Formato: 8 dígitos + letra (ej. 12345678A).',
],
Testing: Use the package’s test cases as a reference:
$this->assertTrue((new Nif)->passes('nif', '12345678A'));
$this->assertFalse((new Nif)->passes('nif', '12345678'));
How can I help you explore Laravel packages today?