0

我正在尝试验证密码输入字段,并且空格没有被验证器捕获。密码字段至少应包含 6 个字符,并且正则表达式应允许密码中包含空格,但不能在开头或结尾处使用空格(我已确认这在验证器之外有效)。

当用户在密码字段中输入 1+ 个空格(但没有其他字符)并提交时,验证器无法捕获它(即,“ ”没有被验证器捕获)。

这是我的验证器的样子:

$this->validate($request, [
    'name' => 'required|max:255|alpha',
    'password' => 'regex:/^[^\s]+(\s+[^\s]+)*$/|min:6|confirmed',
]);
4

3 回答 3

2

验证器通过修剪输入来检查输入是否为isValidatable(),并确定输入是否为空,尽管它是空的,但是否仍应验证该输入(即,具有诸如 required、present 等规则的输入被确定为是可验证的,并在验证过程中稍后处理)。

在这种情况下,由于这些隐式规则均未包含在字段验证规则中,因此空格输入被确定为不可验证,并且从未达到 regex 或 min 规则。

HT to jemaclus 挖掘并发现这一点。

于 2016-08-31T21:36:28.210 回答
0

我用这个在一个测试laravel应用程序中进行了测试,它似乎工作

'password' => 'required|min:6|confirmed|regex:/^[^\s]+(\s+[^\s]+)*$/',

于 2016-08-31T21:06:18.827 回答
0

您的正则表达式有误。在第二个 \s 之后应该是 * 而不是 +。使用以下一个:

/^[^\s]+(\s*[^\s]+)*$/

如果其他规则与正则表达式一起使用并且它们与管道分开,则验证器可能无法工作。所以尝试使用规则数组:

'password' => array('regex:/^[^\s]+(\s*[^\s]+)*$/', 'min:6', 'confirmed')

于 2016-08-31T20:35:47.177 回答