我正在尝试找一块正则表达式来删除货币格式。
我有两种货币值。一种是美元格式,如1,000.00,另一种是欧元,如1.000,00。我需要通过删除逗号和点像1000.00
来将值保存到db例如,如果用户输入美元值2,222.65,则需要替换为2222.65,
如果用户输入欧元值如2.222,65,则还需要更换为2222.65,
答案 0 :(得分:1)
与使用的分隔符相匹配的一个灵魂,并将其更改为您喜欢的分隔符
<?php
/* split input in 3 parts: integer, separator, decimals */
if(preg_match('#^(?<integer>.*)(?<separator>[\.,])(?<decimals>[0-9]+)$#', $input, $matches))
{
/* clean integer and append decimals with your own separator */
$number = ((int) preg_replace('#[^0-9]+#', '', $matches['integer']) . '.' . $matches['decimals']
}
else
{
$number = (int) preg_replace('#[^0-9]+#', '', $input);
}
?>
注意:我更喜欢将我的正则表达式置于#insted of /,因为我使用/在我的正则表达式中,
如果ypu更喜欢/您可以使用/[^0-9]+/
和/^(?<integer>.*)(?<separator>[\.,])(?<decimals>[0-9]+)$/
答案 1 :(得分:1)
使用PHP 5 >= 5.3.0, PECL intl >= 1.0.0
可用的NumberFormatter::parse
代替复杂的正则表达式。
// German format
$fmt = new NumberFormatter( 'de_DE', NumberFormatter::DECIMAL );
$num = "1.234.567,891";
echo $fmt->parse($num)."<br>\n";
// USD format
$fmt = new NumberFormatter( 'en_US', NumberFormatter::DECIMAL );
$num = "9,876,543.012";
echo $fmt->parse($num)."<br>\n";
<强>输出:强>
1234567.891
9876543.012
答案 2 :(得分:0)
这假设它们都有小数,但它是最干净的。
$str = "2,222.65";
$clean = preg_replace('/[^\d]/', '', $str);
$clean = substr($clean, 0,-2) . "." . substr($clean,-2);