Laravel 如何验证输入不包含特定单词?

Laravel 如何验证输入不包含特定单词?,laravel,laravel-4,Laravel,Laravel 4,在我的注册表单中,我有一个昵称字段,用户可以在其中输入文本以在我的网站上标识自己。过去,一些用户输入了别人可能会觉得冒犯的昵称。Laravel为表单提供了验证功能,但如何确保表单字段中不包含用户可能会觉得冒犯的词语?虽然Laravel包含了一系列验证规则,但检查给定列表中是否存在词语并不是其中之一: 但是,Laravel还允许我们创建自己的自定义验证规则: 我们可以使用Validator::extend()创建验证规则: Validator::extend('not_contains',fu

在我的注册表单中,我有一个昵称字段,用户可以在其中输入文本以在我的网站上标识自己。过去,一些用户输入了别人可能会觉得冒犯的昵称。Laravel为表单提供了验证功能,但如何确保表单字段中不包含用户可能会觉得冒犯的词语?

虽然Laravel包含了一系列验证规则,但检查给定列表中是否存在词语并不是其中之一:

但是,Laravel还允许我们创建自己的自定义验证规则:

我们可以使用
Validator::extend()
创建验证规则:

Validator::extend('not_contains',function($attribute,$value,$parameters)
{
//禁词
$words=array('a***','f***','s***');
foreach($words作为$word)
{
如果(stripos($value,$word)!==false)返回false;
}
返回true;
});
上面的代码定义了一个名为
not\u contains
的验证规则-它在字段值中查找
$words
中的每个单词,如果发现任何单词,则返回false。否则,它将返回true以指示验证已通过

然后,我们可以正常使用我们的规则:

$rules=数组(
“昵称”=>“必需”|不包含”,
);
$messages=数组(
'not_contains'=>'属性不能包含禁止的单词',
);
$validator=validator::make(输入::all(),$rules,$messages);
如果($validator->fails())
{
return Redirect::to('register')->withErrors($validator);
}

在Laravel 5.7和早期版本中,您可以使用内置的
not_regex
规则检查某些字符串。例如,在控制器内使用
validate
方法。验证需要狗名的表单输入:

...
public function update(Request $request) {
  $custom_validation_messages = [
    'not_regex' => "C'mon! Be original. Give your dog a more interesting name!"
  ];
  $this->validate($request, [
    'pet_name' => [ 'not_regex:/^(fido|max|bingo)$/i' ],
  ], $custom_validation_messages);

  ...
}
在这种情况下,如果提交的
“宠物名”
值为:

  • 菲多
  • 菲多
  • 马克斯
  • 马克斯
  • 宾果游戏
  • 宾果游戏
  • 等等
那么验证就会失败

与此相反,即您只需要Fido、Max或Bingo,然后您可以使用
regex
规则,如下所示:

[ 'regex:/^(fido|max|bingo)$/i' ]

请参阅。

如果整个字段值在/不在列表中,则规则不执行相同的操作?不执行我需要的-in/not\u in检查:。下面的答案检查列表项是否包含在字段中的任何位置。是否尝试了该规则?如果整个字段值位于/不在列表中,则不执行我需要的-in/not\u in检查:。下面的答案检查列表项是否包含在字段中的任何位置。啊!知道了!感谢澄清,你是对的。为了澄清,Laravel5.6中添加了
not_regex