在laravel验证中,正则表达式无法正常工作

时间:2018-02-24 07:02:27

标签: laravel

我正在使用laravel验证。我想要输入和存储这样的数据。 111-111-111。这是演示值。每个部分应该有3个数字。 这是我的验证规则

'id'  => 'required|regex:/[0-9]{3}-[0-9]{3}-[0-9]{3}/|unique:info',

前两部分工作完美,但在最后一部分我可以采取超过3个数字。我的意思是如果输入是111-111-11111则需要输入。

1 个答案:

答案 0 :(得分:2)

这很正常。 你需要像搜索引擎一样考虑正则表达式。根据你的规则,你实际上说:

Is there a string that has 3 numbers and then a hyphen (-)
                           3 numbers and then a hyphen (-)
                           3 numbers

所以这是真的:

123-112-111

但这也是事实:

111-111-111111111
145-156-1155
123-456-87897

因为所有这些都有3个数字和连字符,3个数字和连字符,3个数字和连字符!

您需要以不同方式限制输入。也许在控制器中有另一个规则,例如:

'id'  => 'required|regex:/[0-9]{3}-[0-9]{3}-[0-9]{3}/|max:11|unique:info',

这只是一个基本的例子,我相信你可以找到更好的东西。

同时查看此网站:https://regexr.com/

更新

这实际上是解决您问题的最佳方案:

/[0-9]{3}-[0-9]{3}-[0-9]{3}$/

在你的正则表达式结束时使用$,你会说:

这是我的字符串的结尾,如果用户在第二个连字符后写入超过3个字符,则不接受输入。