如果string为空,则CodeIgniter表单验证规则不会运行

时间:2014-06-07 12:16:54

标签: php regex codeigniter

我有一个自定义规则regex[table_name.column_name.post_value],我正在使用以下方式:

$this->form_validation->set_rules(
  'postal_code',
  'Postal code',
  'regex[countries.postal_code_regex.country_code]'
);

这是 MY_Form_validation.php 中我的自定义规则的功能:

public function regex($str, $field){
    list($table, $col, $post_val)=explode('.', $field);
    // Grab the regex
    $regex = $this->CI  ->db
                        ->limit(1)
                        ->select($col)
                        ->where($post_val, $_POST[$post_val])
                        ->get($table)
                        ->row($col);

    return preg_match('/'.$regex.'/', $str) === 1;
}

如果用户发送空字符串,如何让CodeIgniter运行此规则?

注意:我无法使用required规则,因为它取决于数据库是否具有正则表达式。

2 个答案:

答案 0 :(得分:0)

尝试以下代码:

public function regex($str, $field){
    list($table, $col, $post_val)=explode('.', $field);
    // Grab the regex
    $regex = $this->CI  ->db
                        ->limit(1)
                        ->select($col)
                        ->where($post_val, $_POST[$post_val])
                        ->get($table)
                        ->row($col);

    if(trim($str) === "")
    $str = 1;
    return preg_match('/'.$regex.'/', $str) === 1;
}

答案 1 :(得分:0)

对于我自己的问题,我提出了这个相当丑陋的解决方案:

if( isset($_POST['country_code']) && $_POST['postal_code'] == NULL){
  $_POST['postal_code'] = ' ';
}

然后我添加了trim规则以确保它不会在数据库中存储空间。

当然,如果有人能想到一个更好的解决方案,那我就是全部。