我尝试使用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;比方说,我的验证器什么都不做或者无法显示我上面定义的自定义消息?
答案 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",
),