Php 使用codeigniter表单验证库。验证不是来自post的数组的步骤

Php 使用codeigniter表单验证库。验证不是来自post的数组的步骤,php,codeigniter,validation,preg-match,codeigniter-2,Php,Codeigniter,Validation,Preg Match,Codeigniter 2,可能是复制品。但是我在谷歌上找不到任何东西,所以我们开始吧 我有一张提交数据的表格。对这些数据进行进一步处理,并将其拆分为变量 范例 我的表单帖子 因此,我收到这样的帖子,并将其拆分为 $username=username@demo.com $password=password 现在我想验证这些变量,因为form_验证库。已经有了,为什么不使用它呢!。我知道我可以使用preg_match。但我认为我没有必要重新发明已经存在的东西,一个 $this->form_validation->

可能是复制品。但是我在谷歌上找不到任何东西,所以我们开始吧

我有一张提交数据的表格。对这些数据进行进一步处理,并将其拆分为变量

范例

我的表单帖子

因此,我收到这样的帖子,并将其拆分为

$username=username@demo.com
$password=password
现在我想验证这些变量,因为form_验证库。已经有了,为什么不使用它呢!。我知道我可以使用preg_match。但我认为我没有必要重新发明已经存在的东西,一个

$this->form_validation->set_rules($username, 'username', 'required|xss_clean');
$this->form_validation->set_rules($password, 'username', 'required|xss_clean');
这将是一个很好的方法

有没有办法调整CI表单验证以接受变量而不是字段名称?可能是一个助手功能将是伟大的这件事。它甚至可以使用$$variable来标识规则(如match[]验证)的变量名


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

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

<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_验证使用$_POST数组,在应用验证之前将其拆分如下:
$_POST['username']='username@demo.com“
。操作
$this->form_validation->set_rules('username'、'username'、'required | xss_clean')
将正确处理它,只是我觉得破解$_POST不合适,我正在寻找一个更优雅的解决方案!,但无论如何都要感谢:)CI 3.0允许您定义自己的数据数组进行验证。您可以自行获取代码并扩展/替换验证库,或者完全使用3.0(自行承担风险)。
<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;
}