Laravel验证min和regex输出到同一条消息

时间:2018-07-19 10:15:44

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

我有一个奇怪的问题,我不太确定为什么会发生,或者我只是想念一些东西。

我在输入的“邮政编码”字段上有多个验证规则,就像这样

'postcode' => [
                'required',
                'min:5',
                'max:8',
                'regex:/^[a-z]/i'
              ],

我还为类似规则写了自定义消息

return [
     'postcode.min' => 'The postcode must be at least 5 characters',
     'postcode.regex' => 'Sorry, the postcode must start with a letter',
];

我所有的错误都这样循环显示

<div class="error-block {{ (count($errors) > 0) ? '' : 'hide' }}">
    <div class="col-12">
        <ul>
            @if(count($errors) > 0)
                @foreach($errors->all() as $error)
                    <li>{{$error}}</li>
                @endforeach
            @endif
        </ul>
    </div>
</div>

但是当两个邮政编码规则都被击中时(例如输入'123'),它会将两个错误都推到同一行,但是所有其他错误都可以正确显示,就像这样

  
      
  • 邮政编码必须至少包含5个字符,对不起,邮政编码必须以字母开头。
  •   
  • 用户名字段为必填项。
  •   
  • 地址行1字段为必填字段。
  •   

为什么laravel将min和regex规则消息推送到同一行?

2 个答案:

答案 0 :(得分:1)

As described in the docs,验证规则应表示为字符串,单个输入的不同规则用管道|分隔。要验证的输入集应该是一个数组,而不是规则本身。

对于您的情况,对于postcode输入:

'postcode' => 'required|min:5|max:8|regex:/^[a-z]/i',

答案 1 :(得分:0)

这意味着您的$error是一个数组。如果要将所有错误都列为新行,请检查错误是否也是数组还是不是数组。

 @if(count($errors) > 0)
        @foreach($errors->all() as $error)
            @if(is_string($error))
               <li>{{$error}}</li>
           @else
                @foreach( $error as $newBreakdown)
                     <li>{{$newBreakdown}}</li>
                @endforeach
           @endif
        @endforeach
    @endif