Laravel 4,验证。即使用户名输入字段包含“đšđšžšđčč”的无效字符,以下验证也会通过验证。这是为什么?不应该alpha_dash只允许'/ ^([a-z0-9 _-])+ $ / i'?
public function postSignup()
{
$data = Input::all();
$validator = Validator::make(
$data,
array('username' => 'required|alpha_dash')
);
if ($validator->fails())
{
echo 'fail';
}
else
{
echo 'ok';
}
return;
}
答案 0 :(得分:3)
不确定,但您可以注册自定义验证规则,仅允许ascii
个字符
Validator::extend('asciiOnly', function($attribute, $value, $parameters)
{
return !preg_match('/[^x00-x7F]/i', $value);
});
所以,你可以使用这样的东西
array('username' => 'required|asciiOnly|alpha_dash');
可能会禁用/使非ascii字符无效(not tested
)。
答案 1 :(得分:0)
您遇到的问题是Validator类可接受的行为。这是规则的确切代码(在撰写本文时):
return preg_match('/^[\pL\pN_-]+$/u', $value);
enables UTF-8 support末尾的u
修饰符。然后\pL
和\pN
分别与字母和数字相匹配(类似于您可能已经习惯的\w
和\d
)。
我不确切知道您正在验证哪些数据,但UTF-8支持在您的应用程序中是一件好事。也就是说,如果你想创建一个更适合自己的规则,unicode character properties是完美的。