Laravel preg_match():未找到结束分隔符'/'

57

我正在使用 Laravel 4.2。我尝试使用 Validator 和正则表达式验证名称字段,以下是我的规则:

 public static $rules_save = [

        'class_subjects' => 'required|regex:/[0-9]([0-9]|-(?!-))+/'
    ];

但是一旦我调用需要验证的规则,就会抛出错误,如下所示:

preg_match(): No ending delimiter '/' found
2个回答

181

由于您的正则表达式中有一个管道符,请使用数组:

public static $rules_save = [
    'class_subjects' => ['required', 'regex:/[0-9]([0-9]|-(?!-))+/'],
];

文档指出:

当使用regex模式时,如果正则表达式包含管道字符,则可能需要将规则指定为数组,而不是使用管道分隔符。


谢谢,它有效。我之前看过这个,只是觉得我不需要它。 - Arlind Hajredinaj
哈哈,你为什么会这么想呢?明确地说了,如果你有一个管道... - chesscov77
1
让我直接解释一下。如果使用管道符号,您只需要在验证规则前后添加[ ]即可。 - Ray Coder
我正在使用一个数组,但在测试期间出现了相同的错误。它通过了第一个测试,但在第二个测试中失败,并显示以下消息。 - shorif2000

0

Laravel 6.x,第二行可以使用带有管道的正则表达式工作,但第一行不行。它验证“公司”表的“参考”字段:a)必填,b)“参考”必须是BV000或A000格式,c)不能重复。

$this->validate($request,[
// 'records.reference' => 'required|regex:/^[A-Z][0-9]{3}$/|unique:companies,reference,'.$request->records['id'],
'records.reference' => ["required","regex:/^(BV|[A-Z]?)[0-9]{3}$/","unique:companies,reference,".$request->records['id']],
]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接