【问题标题】:Laravel validation regex, breaks in viewLaravel 验证正则表达式,视图中断
【发布时间】: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。

标签: php html regex validation 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 以不包含该逗号,而不是编写自定义验证器。例如,x{1,3} 也可以表示为xx?x?。无论如何,祝你的项目好运!
【解决方案2】:

尝试这样使用。

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 2018-11-13
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    相关资源
    最近更新 更多