Laravel表单验证,如果不为空则失败

7

我有一个需要为空的输入字段,否则我希望验证失败。 这是通过联系表单阻止垃圾邮件的尝试。

我已查看验证的文档,但除了“max”规则外,没有其他方法可以实现此目的,但这并不起作用。

还有其他选项吗?

5个回答

10
这里有一个干净且(可能)防弹的解决方案:
    'mustBeEmpty'  => 'present|max:0',

3
在验证的方法中,扩展/添加自定义规则:
Validator::extend('mustBeEmpty', function($attr, $value, $params){
    if(!empty($attr)) return false;
    return true;
});

然后您可以像这样使用此规则

protected $rules = array(
    'emptyInputField' => 'mustBeEmpty'
);

然后一切照常,只需使用:
$v = Validator::make(Input::except('_token'), $rules);
if($v->passes()) {
    // Passed, means that the emptyInputField is empty
}

有其他方法可以做到这一点,而不需要像这样扩展它或扩展Validator类,但这是一种简单的Laravelish方式。顺便说一句,在Github上有一个可用的软件包作为Laravel应用程序的蜜罐垃圾邮件预防,您可以检查一下。


我尝试了提议的“蜜罐垃圾邮件防护”,它拥有你所需要的一切。;-) - creg

2

对于 Laravel 8.x 及以上版本,您可以使用 prohibited 验证规则:

return [
   'emptyInputField' => 'prohibited',
];

1
我不得不使用'emptyInputField' => 'nullable|prohibited',否则规则总是会触发,即使发送了一个空字符串。 - Alexander Taubenkorb

0
在 Laravel 5.8 中,您可以使用 sometimes 条件规则添加。例如:'email' => 'sometimes|email'。只有当输入字段中存在内容时,这些规则才会被应用。

这不是OP所要求的...该字段必须始终为空。 - Martijn

-1

1
鼓励提供外部资源链接,但请添加上下文说明链接的内容和目的。在引用重要链接时,请引用最相关的部分,以防目标网站无法访问或永久离线。 - pableiros

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接