我使用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');
但它不起作用!
答案 0 :(得分:7)
来自CI Form Validation docs:
注意:您还可以使用允许一个参数的任何本机PHP函数。
is_numeric()
可能适合您,但它接受一些非常不同的格式。
is_float()
可以工作,除了它会在字符串和整数上失败。
这两个函数在验证通常作为货币值接受的数字整数或小数时也过于宽松。内置的CI decimal()
函数需要小数点,并允许+
和-
个字符。
是的,我知道 - 没有帮助,但希望它会让你思考。您想要使用的语法根本不起作用。我建议您通过扩展Form_validation库来创建自己的表单验证规则来验证资金。
创建文件/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
}
}
我最初写了一个破旧的例子,然后我尝试写一些有用的东西,并意识到这取决于你。您可能希望也可能不希望允许$
,€
,-
,+
等字符或超出两个位置的小数,或仅包含一个位置的小数,或逗号在数字中分隔数千...使用你认为合适的任何验证方法。
这里有一个关于货币格式验证的好例子:How to check if an entered value is currency
答案 1 :(得分:4)
这是我在MY_Form_validation类中使用的。
/**
* 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中,您应该为验证错误添加适当的消息。
答案 2 :(得分:3)
直接使用数字....数字|必需
答案 3 :(得分:2)
您可以尝试自定义回调:
$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;
}
}
答案 4 :(得分:0)
ctype_digit
可能有用,它是一个内置的PHP函数。
答案 5 :(得分:0)
现在我们可以使用decimal||integer
来验证数字字符,而不是使用numeric
。
答案 6 :(得分:0)
您可以使用如下
$ this-> form_validation-> set_rules('reward','Reward','callback_validate_money');
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;
}
}