Laravel 模式验证管道字符问题

Posted

技术标签:

【中文标题】Laravel 模式验证管道字符问题【英文标题】:Laravel pattern validation pipe character issue 【发布时间】:2012-10-04 05:30:11 【问题描述】:

使用 Laravel 框架,我需要根据一组有效值检查提交字段的值。

问题是 Laravel 使用 |用于分隔属于字段的验证规则的字符。

不起作用,它会抛出一个

"preg_match: 没有找到结束分隔符'/'":

'my_field' => 'match:/^(value1|value2|different value|yet another)$/'

如果\ 字符不起作用,在这种情况下如何转义| 字符?

【问题讨论】:

github.com/laravel/laravel/pull/1139 【参考方案1】:

答案本质上是,如果您像尝试那样在一个字符串中指定所有规则,则不能使用管道。 m.buettner 提到的拉取请求已关闭。但是,Tayler Otwell 提到了您可以使用的另一种方法:在数组中指定规则。这方面的一个例子是:

$rules = array(
    'field' => array('size:5', 'match:/foo|bar/')
);

【讨论】:

太棒了!我不知道这种替代方法对我来说比摸索长字符串要好得多。 它救了我!在 laravel 4 中 当你退后一步看的时候很明显 |用于分隔规则,但不是当您只关注regex:/value1|value2/ 时 |已经在使用中! 比官方文档好!【参考方案2】:

使用 array() 后,正则表达式模式需要用 /.../ 括起来,以避免 preg_match(): Unknown modifier '|' 错误

【讨论】:

以上是关于Laravel 模式验证管道字符问题的主要内容,如果未能解决你的问题,请参考以下文章

Laravel中间件,管道之面向切面编程

Laravel中间件,管道之面向切面编程

Laravel系列6.4管道过滤器

Laravel 字符串验证以允许空字符串

laravel 4验证器错误数组到字符串转换

Laravel 表单验证集规则,例如前两个字符是字母,后四个字符是数字,例如 AB1234