验证规则中的“非”运算符

Posted

技术标签:

【中文标题】验证规则中的“非”运算符【英文标题】:"Not" operator in validation rule 【发布时间】:2015-10-10 05:00:15 【问题描述】:

我有一个自定义验证规则 is_admin,用于检查用户是否为管理员。

Laravel 是否有一个“相反的”运算符(就像 !php 中的工作方式一样),这样我就可以做类似 not:is_admin 的事情,它会检查用户 不是管理员:

$rules = array(
    'user_id' => 'required|numeric|not:is_admin'
);

$validator = Validator::make(Input::all(), $rules);

if ($validator->fails())

    // return error

else

    // continue

谢谢。

【问题讨论】:

无法否定验证规则。你只需要为is_not_admin 写一个单独的规则:)。 不幸的是,这是真的。请记住重用现有的 is_admin 规则: function is_not_admin(args...) = !is_admin(args...) 【参考方案1】:

是的,我们可以在规则数组上使用条件语句。

$rules 是我们传递给验证类或在请求类中定义的数组。

示例 #1:

public function rules
    //here we return an array of rules like shown below.
   return [
       'field_a'  => 'required',
       'field_b' => 'required',
   ];
//we can add any operator by a little change.
 save validation rules array in variable like shown below.
 $rules = [
      'field_a' => 'required',
      'field_b' => 'required',
 ];

 //now we can add any rule in $rules array using common ways of writing conditional statements.

//For example field_c is required only when field_a is present and field_b is not
     if(isset($this->field_a) && !isset($this->field_b))
         $rules['field_c' => 'required'];
     
   //we can apply any kind of conditional statement and add or remove validation rules on the basis of our business logic.

示例#2

public function rules()

    $rules = [];

    if ($this->attributes->has('some-key')) 
         $rules['other-key'] = 'required|unique|etc';
    

    if ($this->attributes->get('some-key') == 'some-value') 
          $rules['my-key'] = 'in:a,b,c';
    

    if ($this->attributes->get('some-key') == 'some-value') 
        $this->attributes->set('key', 'value');
    

    return $rules;

【讨论】:

【参考方案2】:

是的,您可以通过required_if:field,value 进行验证。 您可以在http://laravel.com/docs/5.0/validation#rule-required-if查看更多详情

或者您可以使用not_in:foo,bar。 您可以在http://laravel.com/docs/5.0/validation#rule-not-in查看更多详情

【讨论】:

以上是关于验证规则中的“非”运算符的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 密码验证规则有错误

正则表达式规则

HTML5中表单验证的好处

正则验证规则整理

Symfony 验证规则是不是随着更新而改变?

javascript身份证号码验证