我有一个自定义规则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
规则,因为它取决于数据库是否具有正则表达式。
答案 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
规则以确保它不会在数据库中存储空间。
当然,如果有人能想到一个更好的解决方案,那我就是全部。