Use*_*r57 44 php laravel laravel-5.2
我想验证用户输入的电话号码,其号码应该是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');
}
Run Code Online (Sandbox Code Playgroud)
Sla*_*opy 79
一种可能的解决方案是使用正则表达式.
'phone' => 'required|regex:/(01)[0-9]{9}/'
Run Code Online (Sandbox Code Playgroud)
这将检查输入从01开始,然后是9个数字.通过使用正则表达式,您不需要numeric
或size
验证规则.
如果您想在其他地方重用此验证方法,最好创建自己的验证规则以验证电话号码.
在你AppServiceProvider
的boot
方法中:
Validator::extend('phone_number', function($attribute, $value, $parameters)
{
return substr($value, 0, 2) == '01';
});
Run Code Online (Sandbox Code Playgroud)
这将允许您phone_number
在应用程序的任何位置使用验证规则,因此表单验证可以是:
'phone' => 'required|numeric|phone_number|size:11'
Run Code Online (Sandbox Code Playgroud)
在验证程序扩展中,您还可以检查$value
数字是否为11个字符.
小智 27
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');
});
Run Code Online (Sandbox Code Playgroud)
用法
将此代码插入要使用您的应用程序启动的代码中.
此规则根据我在
长时间搜索后找到的给定模式验证电话号码,它与许多国家/地区中最常见的移动电话或电话号码相匹配.
这将允许您在应用程序的任何位置使用验证规则,因此您的表单验证可以是:
app/Providers/AppServiceProvider.php
phone
'phone' => 'required|numeric|phone'
viv*_*ino 23
从Laravel 5.5开始,您可以使用artisan命令创建一个新规则,您可以根据您的要求进行编码,以确定它是通过还是失败.
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;
}
Run Code Online (Sandbox Code Playgroud)
然后,像通常对验证一样使用此规则:
use App\Rules\PhoneNumber;
$request->validate([
'name' => ['required', new PhoneNumber],
]);
Run Code Online (Sandbox Code Playgroud)
Ris*_*shi 12
你可以使用这个:
'mobile_number' => ['required', 'digits:10'],
Run Code Online (Sandbox Code Playgroud)
你可以尝试这个手机验证包.Laravel手机
更新
我最近发现了另一个包Lavarel Phone Validator(stuyam/laravel-phone-validator),它使用免费的Twilio电话查询服务
归档时间: |
|
查看次数: |
95946 次 |
最近记录: |