¿Cómo validar el número de teléfono en laravel 5.2? [closed]

7 minutos de lectura

avatar de usuario
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');

    }

  • 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

avatar de usuario
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

avatar de usuario
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.phpen 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],
]);

documentos

  • 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

avatar de usuario
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 de AppServiceProvider

    – 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

avatar de usuario
Risheekant Vishwakarma

Puedes usar esto:

        'mobile_number' => ['required', 'digits:10'],

avatar de usuario
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


avatar de usuario
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)

¿Ha sido útil esta solución?