1

我很确定这应该比我做的更容易。我有一个客户,他的网站向企业和个人提供贷款。

问题在于验证人们输入的金额。我需要去掉货币符号,在整个单位之后丢失任何东西(在大多数情况下是英镑 - 所以丢失便士)并将最终数字转换为可以作为 Double 存储在第三方数据库表中的格式。

上面的内容主要是有效的——除了现在我们让用户混合千位分隔符和小数分隔符,所以需要弄清楚是否有人打算将句号设为千位分隔符或小数位分隔符。

有人有聪明的解决方案吗?正则表达式是路线吗?

谢谢,

史蒂夫

4

2 回答 2

1

我会这样做(假设您的输入没问题,没有像“$6,00,00”或“777.7.98,$8938”或“嗨妈妈”这样的无效输入):

  1. 找到货币符号并将其剥离,它可以在开头或结尾,并且可以是多个字符,例如“USD”,“CHF”等。
  2. 查看是否有小数点分隔符(右起第三个字符),如果没有,则在末尾添加“00”(如乘以 100)
  3. 删除所有空格,所有逗号,所有点,所有'- 我认为没有其他东西可以是千位/小数分隔符,或者只留下数字
  4. 结果除以 100
于 2013-03-21T10:45:10.500 回答
0
    function currencyToDouble($input) {
    if(preg_match("/^(.*)[^0-9]([0-9]{1,2})$/", $input, $matches)) {
        $val = preg_replace("/[^0-9]/", "", $matches[1]) . '.' . $matches[2] . "\n\n";
    } else {
        $val = preg_replace("/[^0-9]/", "", $input) . "\n\n";
    }

    return floatVal($val);


}

是我的最终解决方案,似乎很好地处理了我所有的测试用例。想法?

于 2013-03-26T18:51:06.040 回答