我有一个注册表单,它将用户的国家身份证号码作为输入。在我的国家,国民身份证号码可以是10,13或17位数。 我该如何验证这种类型的验证? 我的验证码如下:
'user_nid' => 'digits_between:10,17|required|numeric|unique:users'
但是,这是不正确的方法导致它取10到17之间的所有值。它没有完全满足主要要求???
现在该怎么办?
答案 0 :(得分:1)
您可以尝试使用regex规则:
'user_nid' => 'regex:/(?:\d{17}|\d{13}|\d{10})/',
答案 1 :(得分:1)
答案 2 :(得分:1)
尝试自定义验证器:
Validator::extend('check_user_nid', function($attribute, $value, $parameters, $validator) {
return strlent((string)$value) == 10 || strlent((string)$value) == 13 || strlent((string)$value) == 17;
});
$validator = Validator::make(["user_nid"=>$request->get('user_nid')], ["user_nid"=>"required|numeric|check_user_nid|unique:users"]);
if ($validator->passes()){
//true part
}
else {
//validation does not pass
}
答案 3 :(得分:0)
你可以轻松地做到。例如,可以有一个选择框,用户将选择它具有哪种类型的ID(13个数字或17),然后将该值赋予输入的最大值和最小值。在控制器中,只需检查输入数据的长度是否等于13或17。