接受'''。或',',作为使用FILTER_VALIDATE_FLOAT时的小数分隔符?

时间:2015-05-11 11:24:10

标签: php

我正在使用PHP filter_input函数来解析HTML表单输入。其中一个输入字段代表金额。我希望我有一些用户使用逗号,有些用点作为小数分隔符。 FILTER_VALIDATE_FLOAT过滤器有一个十进制选项,但我还没有找到一种干净的方法来接受这两个字符作为小数分隔符。

目前,我的代码如下所示,但这不接受123.45等数量。

$money = filter_input(INPUT_POST, 'money', FILTER_VALIDATE_FLOAT, array('options' => array('decimal' => ',')));

是否有任何标准/干净的方式接受几种类型的小数分隔符,而无需编写自定义解析函数?

2 个答案:

答案 0 :(得分:5)

我使用filter_var代替filter_input重写了我的代码,并使用了hd' str_replace技巧。最终结果如下:

$temp_money = str_replace(".", ",", $_POST['money']);
$money = filter_var($temp_money, FILTER_VALIDATE_FLOAT, array('options' => array('decimal' => ',')));

如果$_POST['money']为null,则$money也将为null,这与filter_input的行为相同,因此我的验证代码的其余部分不必更改。

答案 1 :(得分:0)

$money = filter_input(INPUT_POST, 'money', FILTER_VALIDATE_FLOAT) || filter_input(INPUT_POST, 'money', FILTER_VALIDATE_FLOAT, array('options' => array('decimal' => ',')));