Laravel自定义验证消息

时间:2014-06-02 13:55:55

标签: laravel

我尝试使用Laravel验证英国邮政编码。这就是我所拥有的:

//routes.php
    $rules =  array(
        'pcode' => array('required:|Regex:/^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][‌​0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$/') 
    );

    $messages = array(
        'required' => 'The :attribute field is required.',
        'pcode' => array('regex', 'Poscode should be a valid UK based entry'),
    );

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

在我的blade

<input id="postcode" name="pcode" value="{{Input::old('pcode')}}" type="text" placeholder="Postcode" class="form-control" xequired="" />
    @if( $errors->has('pcode') ) <span class="error" style='background-color: pink;'>{{ $errors->first('pcode') }}</span> @endif

如果我提交的表单中包含空pcode字段,则会提醒我输入必填字段。如果我输入的邮政编码无效,&#39; 74rht&#39;比方说,我的验证器什么都不做或者无法显示我上面定义的自定义消息?

2 个答案:

答案 0 :(得分:4)

Laravel manual声明:

Note: When using the regex pattern, it may be necessary to specify rules in an array instead of using pipe delimiters, especially if the regular expression contains a pipe character.

$rules更改为此结构:

$rules = array(
    'pcode' => array(
        'required',
        'Regex:/^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][‌​0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$/'
    ) 
);

如果这不起作用,那么可能你的正则表达式无效,尝试使用更简单的正则表达式来检查验证器是否有效。

答案 1 :(得分:1)

Fist,您需要使用验证器注册自定义验证规则。

    Validator::extend('pcode_rule_name', function($attribute, $value)
    {
        return preg_match('/^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][‌​0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$/', $value);
    });

src:http://laravel.com/docs/validation#custom-validation-rules

然后,您需要在app / lang / en / validation.php

中指定自定义消息

您会找到一个为您的规则添加自定义消息的地方

     'custom' => array(
        'attribute-name' => array(
            'rule-name' => 'custom-message',
        ),
     ),

您可以添加如下规则:

     'custom' => array(
        'pcode' => array(
            'pcode_rule_name' => 'Post Code should be a valid UK based entry',
        ),
     ),

还会有一个数组来命名您的“pcode”字段,因此它会更加雄辩地命名为“required”等规则。

    'attributes' => array(),

只需添加如此名称

    'attributes' => array(
         'pcode' => 'Postal Code",
    ),