2017-03-03 154 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