2017-03-03 234 views
9

下面是我的项目名称规则:Laravel 5.4 - 验证与正则表达式

$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 

我想我的正则表达式在线:

enter image description here

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

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

UPDATE:它的实际工作,我只是在错误的控制器进行了测试,对不起......但也许这将帮助其他人仍然

回答

18

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

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

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

您可以在官方文档阅读:

正则表达式:模式

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

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

https://laravel.com/docs/5.4/validation#rule-regex

+0

窗口。我的变体实际上也可以工作,我只是在错误的控制器上测试它:/ – Black

+2

@EdwardBlack现在使用数组作为正则表达式验证的好习惯是okey,但是如果您需要在正则表达式模式中添加管道未来。 :) – Troyer