laravel自定义校验
Laravel内置的验证规则不够用?咋办?
我们自己来定义!
首先在 app\Providers\AppServiceProvider.php 文件中添加我们自定义的规则:
在boot方法中添加:
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { //密码格式验证 密码必须由字母和数字组成 \Illuminate\Support\Facades\Validator::extend('zzregex', function($attribute, $value, $parameters) { return preg_match('/([0-9]+[a-zA-Z]+|[a-zA-Z]+[0-9]+)[0-9a-zA-Z]*/', $value); }); //手机号格式验证 \Illuminate\Support\Facades\Validator::extend('telphone', function($attribute, $value, $parameters) { return preg_match('/^1[34578][0-9]{9}$/', $value); });
}
当然 上面代码中\Illuminate\Support\Facades\Validator 可以换成Validator 然后在头部use Illuminate\Support\Facades\Validator ; 就行了
自定义验证错误信息,找到resources\lang\validation.php文件
在return中添加
<?php return [ 'zzregex' => '密码必须包含字母和数字', 'telphone' => 'T手机号格式不正确', ]
这样就可以在用我们自定义的规则了。
自定义验证错误信息也可以在使用的时候添加到message数组中,如下:
public function register(){ $input=Input::all(); //获取用户输入的账号和密码 $rules=[ 'code'=>'required', 'mobile'=>'required|telphone', 'password'=>'required|between:6,16|zzregex' ]; $message=[ 'code.required'=>'验证码不能为空', 'mobile.required'=>'手机号不能为空', 'mobile.telphone'=>'请输入正确的手机号', 'password.between'=>'密码必须在6-16位之间', 'password.zzregex'=>'密码必须由字母和数字组成', 'password.required'=>'密码不能为空' ]; $validator=Validator::make($input,$rules,$message); if(!$validator->passes()){ $validatorErrs = $validator->errors()->all(); $errMessages=['errcode'=>1, 'msg'=>$validatorErrs]; return response()->json($errMessages); }