2015-09-27 103 views
0

我在Laravel上玩過4.2。我試着去使用驗證器來驗證名稱字段與正則表達式這裏是我下面的規則:Laravel preg_match():未知修飾符']'

public static $rules_save = [ 
    'name'  => 'required|regex:/[XI0-9/]+/|unique:classes' 
]; 

但只要我所說的規則進行驗證,則會引發錯誤見下圖:

preg_match(): Unknown modifier ']' 

在以下位置:

protected function validateRegex($attribute, $value, $parameters) 
    { 
     $this->requireParameterCount(1, $parameters, 'regex'); 

     return preg_match($parameters[0], $value); // **ON THIS LINE** 
    } 
+0

如果只想匹配'X','I'和數字,只需用']替換'/]'。或者如果你想在字符類中包含'/ /'''。你有什麼要求? –

+0

@stribizhev我需要/作爲正則表達式的一部分。 – Arlind

+1

然後嘗試''name'=>'required | regex:/ [XI0-9 \ /] +/| unique:classes''。它是否按預期工作? –

回答

2

因爲你需要包括/進入角色職業,你需要或者esacpe它:

'name'  => 'required|regex:/[XI0-9\/]+/|unique:classes' 
            ^

或使用其他regex delimiters

使用PCRE功能時,要求圖案被分隔符包圍。分隔符可以是任何非字母數字,非反斜槓,非空白字符。

經常使用的分隔符是正斜槓(/),散列符號(#)和tildes(~)。

+0

此外,請檢查[此鏈接](http://stackoverflow.com/questions/17628868/whats-the-best-way-to-validate-numbers-with-comma-as-decimal-separator/17630122#17630122)if那仍然不起作用。 –

+0

謝謝你的工作。 – Arlind

+0

只是好奇:你發佈了關於管道的另一個問題,我的答案是否真的起作用,還是你必須重新排列它像'public static $ rules_save = [ 'name'=> ['required','regex:/ [XI0 -9 \ /] + /','unique:classes'], ];'? –

1

隨着首款海報(stribizhev)指出的那樣,你需要逃跑的斜線/,這是因爲反斜槓/用作該模式的分隔符。因此,讓它在角色類中扮演一個特殊角色。

所以你的模式應該是這樣的

/[XI0-9\/]+/ 

但是,如果你使用其他分隔符e.g #的,那麼就沒有必要逃避正斜槓。

#[XI0-9/]+# 

在這裏,我也沒有逃脫正斜槓因爲我用#作爲分隔符

希望這有助於。

欲瞭解更多信息,請查看stribizhev發佈的鏈接。

相關問題