2015-09-27 104 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发布的链接。

相关问题