如何在Laravel中的验证规则之间建立OR?

时间:2018-08-06 05:32:35

标签: php laravel

我需要用户名是alphaalpha_num

Validator::make($data, [
    'username' => 'alpha|alpha_num',
]);

3 个答案:

答案 0 :(得分:2)

您可以使用以下验证来解决您的问题。

$this->validate($request, ['fieldname' => 'regex:/^[\w-]*$/']);

答案 1 :(得分:1)

为什么不只使用字母数字(因为apha是字母数字的子集)。

当所有字母字符,所有数字字符或字母和数字字符混合使用时,

alphanum将验证true。

如果您想排除所有数字的可能性(即,当所有字母字符或字母和数字字符的混合使用时都为true,而不是所有数字时都为true),则可以使用正则表达式

Validator::make($data, [
    'username' => 'regex:/^(?![0-9]*$)[a-zA-Z0-9]+$/'
]);

但是要回答有关如何在验证规则中进行“或”的第一个问题,则需要制定自己的自定义规则。

查看有关自定义验证规则的文档 https://laravel.com/docs/5.6/validation#custom-validation-rules

如果要再次使用,最好编写一条规则。如果这是一次性的事情,那么您可以将其放在一个封闭的位置。

作为一个使用闭包的示例,如果您想使用ctype_alpha()测试alpha并使用ctype_alnum()测试字母数字,那么您可以进行OR运算

Validator::make($data, [
    'username' => [ 
        function($attribute, $value, $fail) {
            if( ctype_alpha($value) || ctype_alnum($value)) {
                return $value;
            } 
            return $fail($attribute.' is invalid.');
        }
    ]
]);

答案 2 :(得分:0)

您可以尝试

Validator::make($data, [
    'username' => 'alpha_dash',
]);

正在验证的字段可能包含字母数字字符,破折号和下划线。

详细信息https://laravel.com/docs/5.6/validation#rule-alpha-dash