laravel中是否有任何验证规则可以采用特定的3种类型的输入?

时间:2016-12-15 06:12:37

标签: php laravel validation laravel-5 laravel-validation

我有一个注册表单,它将用户的国家身份证号码作为输入。在我的国家,国民身份证号码可以是10,13或17位数。 我该如何验证这种类型的验证? 我的验证码如下:

'user_nid' => 'digits_between:10,17|required|numeric|unique:users'

但是,这是不正确的方法导致它取10到17之间的所有值。它没有完全满足主要要求???

现在该怎么办?

4 个答案:

答案 0 :(得分:1)

您可以尝试使用regex规则:

'user_nid' => 'regex:/(?:\d{17}|\d{13}|\d{10})/',

或者你可以create custom validation rule

答案 1 :(得分:1)

regex在这里是一个好方法。

'user_nid' => 'regex:/(?:\d{17}|\d{13}|\d{10})/',

归功于@Alexey

答案 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。