Usuario57
Quiero validar el número de teléfono ingresado por el usuario, donde el número debe ser exactamente 11 y debe comenzar con 01 y el campo de valor debe ser solo un número. ¿Cómo lo hago usando la validación de Laravel?
Aquí está mi controlador:
public function saveUser(Request $request){
$this->validate($request,[
'name' => 'required|max:120',
'email' => 'required|email|unique:users',
'phone' => 'required|min:11|numeric',
'course_id'=>'required'
]);
$user = new User();
$user->name= $request->Input(['name']);
$user->email= $request->Input(['email']);
$user->phone= $request->Input(['phone']);
$user->date = date('Y-m-d');
$user->completed_status="0";
$user->course_id=$request->Input(['course_id']);
$user->save();
return redirect('success');
}
PizarraEntropía
Una posible solución sería usar 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 expresiones regulares 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 parte 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.
-
Tu expresión regular no es perfecta. No coincide desde el principio y no verifica la longitud, por lo que esto también es válido:
ht01123456789123456789
. Esta es la expresión regular correcta (como regla de validación):'regex:/^(\+36)[0-9]{9}$/'
.– totymedli
08/04/2017 a las 10:40
-
Si escribe un validador de número de teléfono, debería validar todos los requisitos que debe cumplir un número de teléfono. También debe verificar la longitud y los valores numéricos. En su solución actual, necesita agregar otras reglas en todos los lugares donde la use. Aunque funciona, no es una solución bien organizada. El validador no está completo, después de que pasa la validación, a pesar de su nombre, no dice si algo es realmente un número de teléfono, solo que comienza con
01
.– totymedli
08/04/2017 a las 10:55
-
Esto ya no es válido. En los Países Bajos, se han introducido números M2M que tienen 12 dígitos.
– FrozenDroid
3 de enero de 2018 a las 12:50
-
también puede probar esto, para seleccionar cualquier código de país con el signo más junto con el guión: /\+([0-9][0-9])(\-)[0-9]{9}$/ , sepa que su entrada debe ser: +xx-xxxxxxxxx
– Sabaoon Bédar
17 de mayo de 2021 a las 9:28
javier_domenech
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
Luego 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]\d\d|[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 App\Rules\PhoneNumber;
$request->validate([
'name' => ['required', new PhoneNumber],
]);
-
Es la mejor respuesta porque 1) Utiliza las últimas características de Laravel 2) Admite formatos de números i18n
– Ben V.
19 de julio de 2018 a las 17:54
-
Esta debería ser la respuesta aceptada, ya que sigue el último enfoque.
– Shahrukh Anwar
28 de enero de 2019 a las 6:55
-
en el contexto de laravel, de esta manera reemplaza todas las respuestas proporcionadas en esta pregunta, empuje esto más
–Kevin
30 de octubre de 2019 a las 2:58
-
¡Estoy totalmente de acuerdo con ustedes, muchachos!
– marco
12 de julio de 2021 a las 19:59
Nady Shalaby
Validator::extend('phone', function($attribute, $value, $parameters, $validator) {
return preg_match('%^(?:(?:\(?(?:00|\+)([1-4]\d\d|[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
Inserta este código en el app/Providers/AppServiceProvider.php
para ser arrancado con su aplicación.
Esta regla valida el número de teléfono contra el patrón anterior 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 parte de su aplicación, por lo que la validación de su formulario podría ser:
'phone' => 'required|numeric|phone'
-
¡Gracias! Para cualquiera que tenga problemas con esto, asegúrese de agregar
use Illuminate\Support\Facades\Validator
a la cima deAppServiceProvider
– congelado
05/01/2017 a las 18:00
-
Esta debería ser la respuesta más aceptada, ya que es más completa que la elegida. Por otra parte, entiendo que el momento en que se dio esta respuesta hace toda la diferencia.
– André F.
11 de febrero de 2017 a las 15:45
-
cuando el número de teléfono no es obligatorio, esta solución sigue arrojando el mensaje de error “el número de teléfono no es válido”
– Wildan Muhlis
6 de diciembre de 2017 a las 23:48
Risheekant Vishwakarma
Puedes usar esto:
'mobile_number' => ['required', 'digits:10'],
Abhishek
Usar
required|numeric|size:11
En vez de
required|min:11|numeric
-
¡Quiero hacer solo una entrada numérica pero solo con 11 dígitos! ni menos ni más que eso en realidad
– Usuario57
22 de abril de 2016 a las 18:02
-
En su pregunta, está solicitando al menos 11 números, si desea exactamente 11 números, podría usar
required|numeric|size:11
. Considere actualizar su pregunta si está mal redactada.– PizarraEntropía
22 de abril de 2016 a las 18:07
-
Sí, @SlateEntropy es correcto. Actualice su pregunta, actualizaré la respuesta.
– Abhishek
23 de abril de 2016 a las 3:39
-
justo lo que estaba buscando, esto es universal, gracias
– Siempay
25 de agosto de 2017 a las 17:41
-
¡Esto también aceptará DECIMAL, por lo que esto no es correcto!
– Zoran777
27/09/2018 a las 13:57
Puede probar este paquete de validación de teléfono. Teléfono Laravel
Actualizar
Recientemente descubrí otro paquete Validador de teléfono Lavarel (stuyam/laravel-phone-validator)que utiliza el servicio gratuito de búsqueda de teléfonos Twilio
-
¡Quiero hacer solo una entrada numérica pero solo con 11 dígitos! ni menos ni más que eso en realidad
– Usuario57
22 de abril de 2016 a las 18:02
-
En su pregunta, está solicitando al menos 11 números, si desea exactamente 11 números, podría usar
required|numeric|size:11
. Considere actualizar su pregunta si está mal redactada.– PizarraEntropía
22 de abril de 2016 a las 18:07
-
Sí, @SlateEntropy es correcto. Actualice su pregunta, actualizaré la respuesta.
– Abhishek
23 de abril de 2016 a las 3:39
-
justo lo que estaba buscando, esto es universal, gracias
– Siempay
25 de agosto de 2017 a las 17:41
-
¡Esto también aceptará DECIMAL, por lo que esto no es correcto!
– Zoran777
27/09/2018 a las 13:57
Comunidad
Hay muchas cosas a considerar al validar un número de teléfono si realmente lo piensas. (especialmente internacional), por lo que usar un paquete es mejor que la respuesta aceptada, y si desea algo simple como una expresión regular, sugeriría usar algo mejor que lo que sugirió @SlateEntropy. (algo así como una expresión regular completa para la validación del número de teléfono)
Espero que esto ayude a su php – Números de teléfono de validación personalizados en Laravel 4.2 – Stack Overflow Dice que es 4.2 pero este método también está disponible en 5.2
– Desarrollador
21 de abril de 2016 a las 18:44
¿Cuál es el problema que está teniendo con este código?
– Abhishek
22 de abril de 2016 a las 14:31
Si el número de teléfono a validar siempre debe “ser exactamente 11”, ¿por qué usó un campo de entrada para esto?
–Nico Haase
11 de febrero de 2020 a las 13:09