Laravel 验证正则表达式,视图中断

Posted

技术标签:

【中文标题】Laravel 验证正则表达式,视图中断【英文标题】:Laravel validation regex, breaks in view 【发布时间】:2013-09-28 13:49:01 【问题描述】:

所以,我的模型中有以下规则:

public static $rules = array(
    'name'            => 'required|alpha_dash|unique:subsidiaries',
    'internal_number' => 'required|alpha_dash|unique:subsidiaries',
    'expedition_rate' => array('required', 'regex:/^[0-9]1,3(\.?)[0-9]1,2$/'),
    'hundred_kg_rate' => array('regex:/^[0-9]1,5(\.?)[0-9]1,2$/'),
    'handling'        => array('regex:/^[0-9]1,3(\.?)[0-9]1,2$/'),
    'insurance'       => 'required|numeric',
);

但是,由于某种原因,当正则表达式应用于 html 中的 pattern 属性标记时......它会中断!

结果:

<input required="true" pattern="^[0-9]" class="form-control" ....>
                               _________
                                 \
                                  => This right here should be
                               ^[0-9]1,3(\.?)[0-9]1,2$

【问题讨论】:

你在哪里输出呢?你在使用Former吗? @Raphael_ 其实我用的是Former...规则从控制器传递到视图 那么这确实是Former的问题,而不是Laravel。 【参考方案1】:

尝试转义花括号...我敢打赌 php 期望解析内部变量,如下所示:

$var = 'something';
echo 'The value is $var.';
// Outputs:
// The value is something.

对比:

$var = 'something';
echo 'The value is \$var\.';
// Outputs:
// The value is $var.

但让我感到困惑的部分是这些都在单引号内,所以这不应该发生。也许是 Laravel 的东西?

【讨论】:

如何在正则表达式语法中转义大括号?这对我来说是新的 将所有反斜杠加倍。 对不起,我想我误解了你的问题。要避开花括号,您应该能够做到\...\。当它渲染时,它不应该有那个反斜杠。 这很奇怪。你可能想在 Laravel 的 GitHub 上问这个问题……这很可能是一个错误。我查看了他们的验证测试用例,没有一个包含花括号:github.com/laravel/framework/blob/… 有趣。在您的情况下,您可以重写您的 RegEx 以不包含该逗号,而不是编写自定义验证器。例如,x1,3 也可以表示为xx?x?。无论如何,祝你的项目好运!【参考方案2】:

尝试这样使用。

array(
    'field' => 'regex:[a-z]'
);

希望这会有所帮助。

【讨论】:

以上是关于Laravel 验证正则表达式,视图中断的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 请求验证正则表达式,不需要

Laravel - 使用正则表达式仅验证字母、数字和空格

Laravel 验证仅在字段不为空时验证正则表达式

工作正则表达式在 laravel 验证中不起作用

laravel 正则表达式验证不起作用

Laravel 中正则表达式规则的自定义验证消息?