【问题标题】:Has there any validation rules in laravel that take specific 3 types of input?laravel 中是否有任何接受特定 3 种类型输入的验证规则?
【发布时间】:2017-04-30 15:59:44
【问题描述】:

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

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

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

现在我该怎么办???

【问题讨论】:

  • 您是否尝试过删除数字规则

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


【解决方案1】:

regex 是一个好方法。

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

感谢@Alexey

【讨论】:

  • 此验证无效,因为它将通过 11、12 位等。
【解决方案2】:

尝试自定义验证器:

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】:

    你可以轻松做到。例如,可能有一个选择框,用户将选择它具有的 id 类型(13 数字或 17),然后将该值赋予输入的最大值和最小值。在您的控制器中,您只需检查输入数据的长度是否等于 13 或 17。

    【讨论】:

      【解决方案4】:

      你可以尝试使用regex规则:

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

      您也可以create custom validation rule

      【讨论】:

        猜你喜欢
        • 2018-12-31
        • 2015-12-17
        • 1970-01-01
        • 1970-01-01
        • 2013-12-20
        • 2021-01-11
        • 1970-01-01
        • 2021-06-24
        • 1970-01-01
        相关资源
        最近更新 更多