Validation codeigniter表单验证

Validation codeigniter表单验证,validation,forms,codeigniter,Validation,Forms,Codeigniter,我有以下使用codeigniter框架的php代码 $this->form_validation->set_rules('money', 'Money', 'integer|required|xss_clean'); 它将货币字段验证为整数。如何将字段验证为整数或十进制数 我猜这很简单,就像 $this->form_validation->set_rules('money', 'Money', '(decimal||integer)|required|xss_clean

我有以下使用codeigniter框架的php代码

$this->form_validation->set_rules('money', 'Money', 'integer|required|xss_clean');
它将货币字段验证为整数。如何将字段验证为整数或十进制数

我猜这很简单,就像

$this->form_validation->set_rules('money', 'Money', '(decimal||integer)|required|xss_clean');
但是它不起作用

从CI:

注意:您还可以使用允许一个参数的任何本机PHP函数

可以为您工作,但它接受一些非常不同于金钱的格式

将工作,除非它在字符串和整数上失败

这两个函数在验证通常接受为货币值的数字整数或小数时也过于宽松。内置的CI
decimal()
函数需要小数点,并允许使用
+
-
字符

是的,我知道-没有帮助,但希望它能让你思考。您想要使用的语法将根本不起作用。我建议您通过扩展表单验证库来创建自己的表单验证规则来验证资金

创建文件
/application/libraries/MY_Form_validation.php

大概是这样的:

class MY_Form_validation extends CI_Form_validation {

    function is_money($input = '')
    {
            // Validate input here and return TRUE or FALSE
    }

}
起初我写了一个失败的例子,然后我试着写一些有用的东西,并意识到这取决于你。您可能希望也可能不希望允许像
$
-
+
这样的字符或超过两位的小数、只有一位的小数或数字中的逗号分隔千位。。。使用您认为合适的任何验证方法


这里有一个关于货币格式验证的好例子:

您可以尝试自定义回调:

$this->form_validation->set_rules('money', 'Money', 'callback_money_type');


function money ($param) {

 //conditional statements here

if(is_int($param) || is_float($param){
 $this->form_validation->set_message('money_type', 'Your message here');
  return false;

} else {

  return true;
}

}

ctype\u digit
可能有用,它是一个内置的PHP函数。

直接使用numeric。。。。数字|必选

这是我在表格验证类中使用的

/**
 * Money, decimal or integer
 *
 * @access  public
 * @param   string
 * @return  bool
 */
public function money($str)
{
    //First check if decimal
    if(!parent::decimal($str))
    {
        //Now check if integer
        return (bool) parent::integer($str);
    }

    return TRUE;
}

当然,在您的/system/language/english/form_validation_lang.php中,您应该为验证错误添加适当的消息。

而不是使用
十进制| |整数
现在,我们可以使用
数字
来验证数字字符。

您可以使用下面的方法

$this->form_validation->set_rules('raward'、'raward'、'callback_validate_money')


请始终记住,结合Wesley所说的,您始终可以在set rules验证之外添加其他验证。例如:$array=array('money'=>filter_var('$this->input->post('money'),filter_VALIDATE_INT));。这只是一个例子,并不适合你的特殊需要。也许更适合发表评论?
public function validate_money ($input) {
    if(preg_match('/^[0-9]*\.?[0-9]+$/', $input)){
        return true;
    } else {
         $this->form_validation->set_message('validate_money','Please enter valid reward!');
        return false;
    }
}