我试图转换下列数字,以便所有具有相同的值5460(如果在第三个最后位置或5460处没有逗号或点) ,如果有逗号或点,则为00。使用preg_replace将货币数字换成第三个最后位置的点数
这里是我的测试号:
5460
5.460
5.460€
5460,00
5460,00€
5460.00
5460.00€
5.460,00
5.460,00€
5,460.00
5,460.00€
我用了preg_replace以下的正则表达式:
preg_replace('/[^0-9\,\-]+/','',$number);
的结果如下
5460 -> 5460
5.460 -> 5460
5.460€ -> 5460
5460,00 -> 5460,00
5460,00€ -> 5460,00
5460.00 -> 546000 // wrong
5460.00€ -> 546000 // wrong
5.460,00 -> 5460,00
5.460,00€ -> 5460,00
我不知道如何优化正则表达式,这样错误的值也会被正确地替换为:
5460.00 -> 546000 // wrong because should be 5460,00
5460.00€ -> 546000 // wrong because should be 5460,00
测试用例:
$numbers = array('5460', '5.460', '5.460€', '5460,00', '5460,00€', '5460.00', '5460.00€', '5.460,00', '5.460,00€');
foreach ($numbers as $number)
echo $number." -> ".preg_replace('/[^0-9\,\-]+/','',$number) . "\n";
所以我不知道如何检查,如果最后两个数字前有一个点,如果是用逗号来取代它。但只限于最后两位数字。
感谢
但是...... 5460.00!= 546000!= 5460,00 – Daniel
我必须同意丹尼尔的困惑。你为什么试图将'5460.00'转换为'5460,00'?这个人是否有5千欧元,或54.6万欧元?当然,你希望逗号在*三位数之前出现?像'546,000'一样? –
查看http://ideone.com/Juj0Hd –