Solución:
Una posible solución sería utilizar expresiones regulares.
'phone' => 'required|regex:/(01)[0-9]{9}/'
Esto verificará que la entrada comience con 01 y sea seguida por 9 números. Al usar regex no necesita el numeric
o size
reglas de validación.
Si desea reutilizar este método de validación en otro lugar, sería una buena idea crear su propia regla de validación para validar números de teléfono.
Documentos: validación personalizada
En tus AppServiceProvider
‘s boot
método:
Validator::extend('phone_number', function($attribute, $value, $parameters)
{
return substr($value, 0, 2) == '01';
});
Esto le permitirá utilizar el phone_number
regla de validación en cualquier lugar de su aplicación, por lo que la validación de su formulario podría ser:
'phone' => 'required|numeric|phone_number|size:11'
En la extensión de su validador también puede verificar si el $value
es numérico y tiene 11 caracteres de longitud.
Desde Laravel 5.5 en adelante, puede usar un comando artesanal para crear una nueva regla que puede codificar con respecto a sus requisitos para decidir si pasa o falla.
Ej:
php artisan make:rule PhoneNumber
Entonces edita app/Rules/PhoneNumber.php
, en pases de método
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
return preg_match('%^(?:(?:(?(?:00|+)([1-4]dd|[1-9]d?))?)?[-. \/]?)?((?:(?d{1,})?[-. \/]?){0,})(?:[-. \/]?(?:#|ext.?|extension|x)[-. \/]?(d+))?$%i', $value) && strlen($value) >= 10;
}
Luego, use esta regla como lo haría normalmente con la validación:
use AppRulesPhoneNumber;
$request->validate([
'name' => ['required', new PhoneNumber],
]);
docs
Validator::extend('phone', function($attribute, $value, $parameters, $validator) {
return preg_match('%^(?:(?:(?(?:00|+)([1-4]dd|[1-9]d?))?)?[-. \/]?)?((?:(?d{1,})?[-. \/]?){0,})(?:[-. \/]?(?:#|ext.?|extension|x)[-. \/]?(d+))?$%i', $value) && strlen($value) >= 10;
});
Validator::replacer('phone', function($message, $attribute, $rule, $parameters) {
return str_replace(':attribute',$attribute, ':attribute is invalid phone number');
});
Uso
Inserte este código en el app/Providers/AppServiceProvider.php
para que se inicie con su aplicación.
Esta regla valida el número de teléfono contra el patrón dado arriba que encontré después
búsqueda larga, coincide con los números de teléfono o móviles más comunes en muchos países
Esto le permitirá utilizar el phone
regla de validación en cualquier lugar de su aplicación, por lo que la validación de su formulario podría ser:
'phone' => 'required|numeric|phone'