Laravel 4 alpha_dash验证奇数问题

时间:2013-10-24 18:40:46

标签: php laravel laravel-4

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

2 个答案:

答案 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是完美的。