0

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;
}
4

2 回答 2

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)。

于 2013-10-24T20:15:43.770 回答
0

您遇到的是 Validator 类的可接受行为。这是规则的确切代码(在撰写本文时):

return preg_match('/^[\pL\pN_-]+$/u', $value);

最后的u修饰符启用 UTF-8 支持\pL然后\pN是分别匹配字母和数字的unicode 字符属性(类似于\w并且\d您可能已经习惯了)。

我不确切知道您要验证的数据是什么,但是 UTF-8 支持在您的应用程序中是一件好事。也就是说,如果您想创建自己的更量身定制的规则,Validator::extend()则非常适合。

于 2013-10-26T06:53:57.513 回答