用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1446|回复: 4
收起左侧

[版本 3.x] 【已解决】表单验证正则表达式规则获取失败

[复制链接]
发表于 2016-7-2 13:49:48 | 显示全部楼层 |阅读模式
本帖最后由 pepsi8 于 2016-7-15 00:32 编辑

验证规则如下:
$this->form_validation->set_rules('color', '标题颜色', 'regex_match[/^#([a-f0-9]{3}|[a-f0-9]{6})$/]');
执行时,总是提示:
Severity: Warning
Message:  preg_match(): No ending delimiter '/' found
Filename: libraries/Form_validation.php
Line Number: 1082


于是,在1082行前面加上 exit($regex);
输出的正则表达式是 /^#([a-f0-9 可见正则获取不正确,不知道是我验证规则写的不对,还是此处有bug?求解。


此问题已解决,感谢 燃雲 的指点!遇到这种情况,只需把验证规则以数组形式传递即可。如下:
$this->form_validation->set_rules('color', '标题颜色', array('regex_match[/^#([a-f0-9]{3}|[a-f0-9]{6})$/]'));
发表于 2016-7-2 20:29:27 | 显示全部楼层
简单看源码,问题似乎在'|'。
试拿走'|',是否仍报错?
 楼主| 发表于 2016-7-3 16:22:05 | 显示全部楼层
燃雲 发表于 2016-7-2 20:29
简单看源码,问题似乎在'|'。
试拿走'|',是否仍报错?

谢谢,去掉竖线确实可以解决问题。
改为如下验证规则:
$this->form_validation->set_rules('color', '标题颜色', 'regex_match[/^#[a-f0-9]{3}([a-f0-9]){3})?$/i]');
这样就可以通过了。

虽然现在没问题了,但我还是觉得这不是真正的解决方法,毕竟竖线本来就是正则的一部分,也不见得所有带竖线的正则都可以改成不带竖线的。
发表于 2016-7-5 15:24:22 | 显示全部楼层
pepsi8 发表于 2016-7-3 16:22
谢谢,去掉竖线确实可以解决问题。
改为如下验证规则:
$this->form_validation->set_rules('color', '标 ...

参数若是string,set_rules会按'|'进行分拆,参数若是array便可避免处理。可试试以array送入参数。

可参考手册相关说明。
 楼主| 发表于 2016-7-15 00:27:57 | 显示全部楼层
燃雲 发表于 2016-7-5 15:24
参数若是string,set_rules会按'|'进行分拆,参数若是array便可避免处理。可试试以array送入参数。

可参 ...

谢谢,你的方法正是我需要的,经验证可行。手册我看过了,因为我水平不行,有些地方只是看了,没很好的理解。

本版积分规则