Laravel 5.1 创建自定义验证规则

Laravel 5.1 Creating custom validation rules

在注册表单中,用户名只能包含 a-z A-Z 0-9 下划线、破折号和点。所以我在AppServiceProvider的boot方法中定义了一个自定义验证器如下;

Validator::extend('valid_username', function ($attribute, $value, $parameters)
            {
                    return preg_match('[a-zA-Z0-9_\-\.]', $value);
            }

但验证从未通过。我做错了什么?

看起来没问题,除了preg_match需要在模式的开始和结束处使用/,你还应该匹配字符串的start/end,并告诉它匹配多个字符:

Validator::extend('valid_username', function ($attribute, $value, $parameters)
{
    return preg_match('/^[a-zA-Z0-9_\-\.]+$/', $value);
}

您当前的模式只会确认存在其中一个字符,而不是只有 个字符。