使用正则表达式验证表单时出错

时间:2017-04-18 10:14:53

标签: php codeigniter validation codeigniter-3

我使用codeigniter 3.x

进行正则表达式验证
$this->form_validation->set_rules('FieldName','FriendlyName','trim|required|regex_match[/^([a-zA-Z]{6}[0-9]{2}[a-zA-Z]{1}[0-9]{2}[a-zA-Z]{1}[0-9]{3}[a-zA-Z]{1})$|^([0-9]{11})$/]');

此正则表达式用于获取财政代码或意大利增值税代码(或者)

我收到此错误

  

严重性:警告消息:preg_match():没有结束分隔符' /'结果

问题是什么?我看到' /'在我的正则表达式调用的开头和结尾处的char ...

由于

1 个答案:

答案 0 :(得分:0)

您需要以不同的方式处理正则表达式部分,因为管道(|)正在创建问题。

当Codeigniter尝试将此行转换为表单规则数组

$this->form_validation->set_rules(
'FieldName',
'FriendlyName',
'trim|required|regex_match[/^([a-zA-Z]{6}[0-9]{2}[a-zA-Z]{1}[0-9]{2}[a-zA-Z]{1}[0-9]{3}[a-zA-Z]{1})$|^([0-9]{11})$/]');

Codeigniter会得到这个: -

Array
(
    [0] => trim
    [1] => required
    [2] => regex_match[/^([a-zA-Z]{6}[0-9]{2}[a-zA-Z]{1}[0-9]{2}[a-zA-Z]{1}[0-9]{3}[a-zA-Z]{1})$
    [3] => ^([0-9]{11})$/]
)

但正确的转换应该是这样的: -

Array
(
    [0] => trim
    [1] => required
    [2] => regex_match[/^([a-zA-Z]{6}[0-9]{2}[a-zA-Z]{1}[0-9]{2}[a-zA-Z]{1}[0-9]{3}[a-zA-Z]{1})$^([0-9]{11})$/]
)

因此应用此正则表达式时,不应在正则表达式部分中使用 |