Codeigniter regex_match with Comparison

时间:2015-09-11 15:49:29

标签: php regex codeigniter

我有这个regex_match喜欢 -

$this->form_validation->set_rules('oper_nic', 'NIC', 'trim|required|min_length[10]|regex_match[/^[0-9]{9}[vVxX]$/]');

它验证9个数字后跟一个字母v,V,x或X.

我需要将上述验证结合到另一个可以进入1988年的字段中,并同时验证两个字段中的(88)值。

  

Ex:值 880989898V (根据这个表达式   正确的)

我为单独的文本字段输入的另一个字段,其值为 - 1993

  

根据 1993 的值是错误的, 1988 应该是正确的

因为第一个值以88开头而其他值以88结尾。

如何使用CodeIgniter编写代码来实现此目的。

1 个答案:

答案 0 :(得分:2)

您可以编写类似@tpojka建议的回调函数。这是一个例子:

class Form extends CI_Controller {

    public function index()
    {
        // load stuff
        // ...

        $this->form_validation->set_rules('oper_nic', 'NIC', 'trim|required|min_length[10]|regex_match[/^[0-9]{9}[vVxX]$/]');
        $this->form_validation->set_rules('year', 'Year', 'callback_year_check');

        if ($this->form_validation->run() == FALSE)
        {
            // failure
        }
        else
        {
            // success
        }
    }

    public function year_check($str)
    {
        if (substr($str, -2) == substr($this->form_validation->set_value('oper_nic'), 0, 2)) 
        {
            return true;
        } 
        return false;
    }
}

当然,为了简单起见,我只提到了一个验证标志,实际上你需要这样的东西:

$this->form_validation->set_rules('year', 'Year', 'trim|required|regex_match[/^[0-9]{4}$/]|callback_year_check');