如何在 laravel 5.2 中验证电话号码?[已关闭]

2022-08-30 08:49:50

我想验证用户输入的电话号码,其中数字应正好是11,并以01开头,值字段应仅为数字。如何使用Laravel验证进行验证?

这是我的控制器:

  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');

    }

答案 1

一种可能的解决方案是使用正则表达式。

'phone' => 'required|regex:/(01)[0-9]{9}/'

这将检查输入以01开头,后跟9个数字。通过使用正则表达式,您不需要 或 验证规则。numericsize

如果要在其他位置重用此验证方法,最好创建自己的验证规则来验证电话号码。

文档:自定义验证

在您的 方法中:AppServiceProviderboot

Validator::extend('phone_number', function($attribute, $value, $parameters)
{
    return substr($value, 0, 2) == '01';
});

这将允许您在应用程序中的任何位置使用验证规则,因此您的表单验证可以是:phone_number

'phone' => 'required|numeric|phone_number|size:11'

在您的验证器扩展中,您还可以检查是否是数字和11个字符长。$value


答案 2

从Laravel 5.5开始,您可以使用工匠命令来创建一个新规则,您可以根据自己的要求对其进行编码,以决定它是通过还是失败。

Ej:php artisan make:rule PhoneNumber

然后在方法传递上编辑 ,app/Rules/PhoneNumber.php

/**
 * 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;
}

然后,像通常对验证所做的那样使用此规则:

use App\Rules\PhoneNumber;

$request->validate([
    'name' => ['required', new PhoneNumber],
]);

文档


推荐