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 验证正则表达式,视图中断的主要内容,如果未能解决你的问题,请参考以下文章