【问题标题】:Laravel preg_match(): Unknown modifier ']'Laravel preg_match(): 未知修饰符 ']'
【发布时间】:2015-12-24 18:45:45
【问题描述】:

我在 Laravel 4.2 上工作。我尝试使用验证器通过正则表达式验证名称字段,这是我的以下规则:

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**
    }

【问题讨论】:

  • 如果您只想匹配XI 和数字,只需将/] 替换为]。或者,如果您想将/ 包含到字符类中:\/]。您有什么要求?
  • @stribizhev 我需要 / 作为正则表达式的一部分。
  • 然后试试'name' => 'required|regex:/[XI0-9\/]+/|unique:classes'。它是否按预期工作?

标签: php regex laravel laravel-validation


【解决方案1】:

由于您需要将/ 包含到字符类中,因此您需要转义它:

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

或者使用其他regex delimiters

在使用 PCRE 函数时,需要将模式用 分隔符 括起来。分隔符可以是任何非字母数字、非反斜杠、非空白字符。

常用的分隔符是正斜杠 (/)、井号 (#) 和波浪号 (~)。

【讨论】:

  • 另外,检查this link如果仍然不起作用。
  • 只是好奇:您发布了另一个关于管道的问题,我的回答真的有效吗,还是您必须像 public static $rules_save = [ 'name' => ['required', 'regex:/[XI0-9\/]+/','unique:classes'], ]; 那样重新排列?
【解决方案2】:

正如第一张海报(stribizhev)指出的那样,您需要转义正斜杠/,这是因为反斜杠/ 在该模式中用作分隔符。因此,让它在字符类中表现得像一个特殊字符。

因此你的模式应该是这样的

/[XI0-9\/]+/

但如果您使用其他分隔符,例如#,则无需转义正斜杠。

#[XI0-9/]+#

这里,我没有转义正斜杠,因为我使用了# 作为分隔符

希望这会有所帮助。

有关更多信息,请查看 stribizhev 发布的链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    相关资源
    最近更新 更多