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