使用codeigniter表单验证lib。验证数组不是来自post

时间:2013-05-05 11:34:27

标签: php codeigniter validation preg-match codeigniter-2

可能是重复的。但我无法在谷歌上找到任何东西,所以我们去吧。

我有一个提交数据的表单。这些数据是进一步的过程并将其分解为变量。

例如

我的表单帖子<input name='cmd' value='create -u username@demo.com -p password'/>

所以我收到这样的帖子并将其分成

$username=username@demo.com
$password=password

现在我想验证这些变量,因为form_validation lib。已经存在了,为什么不使用它!我知道我可以使用preg_match。但我认为我没有必要重新发明现有的东西,

$this->form_validation->set_rules($username, 'username', 'required|xss_clean');
$this->form_validation->set_rules($password, 'username', 'required|xss_clean');

将是一个很好的方法。

有没有办法可以调整CI表单验证来接受变量而不是field_name?可能是一个帮手功能对这件事情会很好。对于像match [] validation这样的规则,它甚至可以使用$$变量来识别变量的名称。

非常感谢,我希望我能很好地解释我的问题。

1 个答案:

答案 0 :(得分:0)

有两种方法可以满足您的需求,一种是定义您的输入字段,并在客户端进行拆分,如:

<form method="post">
  <input id="cmd" value="<?php if (set_value('username')) : ?>create -u <?=set_value('username')?> -p <?=set_value('password')?><?php endif; ?>"/>
  <input type="hidden" name="username" value="<?=set_value('username')?>" />
  <input type="hidden" name="password" value="<?=set_value('password')?>" />
</form>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"/>
<script type="text/javascript">
$(function () {
    $('#cmd').change(function () {
        var matches = $(this).val().match(/create -u ([^\b]+) -p ([^\b]+)\]/);
        $('input[name=username]').val(matches[1]);
        $('input[name=password]').val(matches[2]);
    });
});
</script>

或者您只需使用以下回调进行验证:

<form method="post">
  <input name="cmd" value="<?=set_value('cmd')?>"/>
</form>

$this->form_validation->set_rules('cmd', 'Command', 'required|callback_validate_cmd');

function validate_cmd($cmd)
{
    if ($cmd) {
        list($username, $password) = split_cmd($cmd);
        $this->load->helper('security');
        if ( ! xss_clean($username)) {
            $this->form_validation->set_message(__FUNCTION__, 'username_not_secure');
            return FALSE;
        } elseif ( ! xss_clean($password)) {
            $this->form_validation->set_message(__FUNCTION__, 'password_not_secure');ç
            return FALSE;
        }
    }
    return TRUE;
}