Laravel 5.4 - 使用正则表达式进行验证

2022-08-30 11:10:24

以下是我对项目名称的规则:

$this->validate(request(), [
    'projectName' => 'required|regex:/(^([a-zA-z]+)(\d+)?$)/u',
];

我正在尝试添加规则,使其必须以a-z或A-z的字母开头,并且可以以数字结尾,但大多数不是。

项目名称的有效值:

myproject123
myproject
MyProject

项目名称的值无效:

123myproject
!myproject
myproject 123
my project
my project123

我在网上尝试了我的正则表达式:

enter image description here

https://regex101.com/r/FylFY1/2

它应该可以工作,但我可以通过验证,即使使用.project 123

更新:它实际上有效,我只是在错误的控制器中测试了它,对不起...但也许它会帮助别人


答案 1

您的规则做得很好,但您需要知道,使用由管道分隔的正则表达式指定验证规则可能会导致不需要的行为。

定义验证规则的正确方法应该是:

$this->validate(request(), [
    'projectName' => 
        array(
            'required',
            'regex:/(^([a-zA-Z]+)(\d+)?$)/u'
        )
];

您可以在官方文档上阅读:

正则表达式:模式

正在验证的字段必须与给定的正则表达式匹配。

注意:使用正则表达式/not_regex模式时,可能需要在数组中指定规则,而不是使用管道分隔符,尤其是在正则表达式包含管道字符的情况下。


答案 2

推荐