分类
后端

Laravel 5.5添加自定义表单验证规则

存在验证码身份证的函数:

if (!function_exists('is_card')) {
/**
* 身份证号
* @param $str
* @return bool
*/
function is_card($str)
{
$str = strtoupper($str);
$regx = "/(^\d{15}$)|(^\d{17}([0-9]|X)$)/";
$arr_split = array();
if (!preg_match($regx, $str)) {
return false;
}
//检查15位
if (15 == strlen($str)) {
$regx = "/^(\d{6})+(\d{2})+(\d{2})+(\d{2})+(\d{3})$/";
@preg_match($regx, $str, $arr_split);
//检查生日日期是否正确
$dtm_birth = "19" . $arr_split[2] . '/' . $arr_split[3] . '/' . $arr_split[4];
if (!strtotime($dtm_birth)) {
return false;
} else {
return true;
}
} else {
//检查18位
$regx = "/^(\d{6})+(\d{4})+(\d{2})+(\d{2})+(\d{3})([0-9]|X)$/";
@preg_match($regx, $str, $arr_split);
$dtm_birth = $arr_split[2] . '/' . $arr_split[3] . '/' . $arr_split[4];
//检查生日日期是否正确
if (!strtotime($dtm_birth)) {
return false;
} else {
//检验18位身份证的校验码是否正确。
//校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
$arr_int = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
$arr_ch = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
$sign = 0;
for ($i = 0; $i < 17; $i++) {
$b = (int)$str{$i};
$w = $arr_int[$i];
$sign += $b * $w;
}
$n = $sign % 11;
$str_num = $arr_ch[$n];
if ($str_num != substr($str, 17, 1)) {
return false;
} else {
return true;
}
}
}
}
}

以上函数添加到laravel的验证器中,实现方法:

1、服务提供者 AppServiceProvider@boot方法下添加代码:

use Validator;
public function boot()
{
//
\Schema::defaultStringLength(191);

//自定义验证码规则
Validator::extend('is_card', function ($attribute, $value, $parameters) {
return is_card($value);
});
}

2、cn/validation.php 验证规则中文包最后添加一条:

'is_card' => ':attribute 格式不正确。',

3、使用

$validator = Validator::make($request->all(), [
'name' => 'required',
'phone' => 'required|regex:/^1[23456789]\d{9}$/i',
'card' => 'required|is_card',
]);

注意:is_card命名必须是is_card,不能使用isCard这种命名

由JsxKu

爱生活,爱技术

发表评论

电子邮件地址不会被公开。 必填项已用*标注