【问题标题】:Laravel 5.4 - Validation with Regex [duplicate]Laravel 5.4 - 使用正则表达式进行验证 [重复]
【发布时间】:2017-07-23 10:55:37
【问题描述】:

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

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

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

项目名称的有效值:

myproject123
myproject
MyProject

项目名称的值无效:

123myproject
!myproject
myproject 123
my project
my project123

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

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

应该可以,但即使使用project 123,我也可以通过验证。

更新:它确实有效,我只是在错误的控制器中测试了它,我很抱歉......但也许它会帮助其他人

【问题讨论】:

    标签: php laravel laravel-5 laravel-5.4


    【解决方案1】:

    你的规则做得很好但是你需要知道,用管道分隔的正则表达式指定验证规则可能导致不受欢迎的行为。

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

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

    您可以阅读official docs

    正则表达式:模式

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

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

    【讨论】:

    • UPS。我的变体实际上也可以,我只是在错误的控制器上测试了它:/
    • 使用 Laravel 5.5+ 你可以调用 $request->validate(['field1'=>'required|regex:/foo/u']);`.