我正试图找到一块正则表达式来删除货币格式。使用正则表达式删除货币格式
我有两种类型的货币值。一种是1,000.00美元的格式,另一种是1000,000欧元的欧元格式。我需要同时去除逗号到数据库保存的价值和点状1000.00
例如,如果用户输入像2,222.65美元的价值,它需要更换至2222.65,
如果用户进入在欧元价值像2.222,65它也需要更换至2222.65,
我正试图找到一块正则表达式来删除货币格式。使用正则表达式删除货币格式
我有两种类型的货币值。一种是1,000.00美元的格式,另一种是1000,000欧元的欧元格式。我需要同时去除逗号到数据库保存的价值和点状1000.00
例如,如果用户输入像2,222.65美元的价值,它需要更换至2222.65,
如果用户进入在欧元价值像2.222,65它也需要更换至2222.65,
而是复杂的正则表达式,使用NumberFormatter::parse
可供PHP 5 >= 5.3.0, PECL intl >= 1.0.0
。
// 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";
OUTPUT:
1234567.891
9876543.012
一个soultion以匹配什么用分离器,并将其更改为你prefere
<?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);
}
?>
公告一:我希望有我在#中插入正则表达式,因为我使用/在我的内部正则表达式,如果 喜欢YPU /你可以使用/[^0-9]+/
和/^(?<integer>.*)(?<separator>[\.,])(?<decimals>[0-9]+)$/
这假定他们都有小数,但它是最干净的。
$str = "2,222.65";
$clean = preg_replace('/[^\d]/', '', $str);
$clean = substr($clean, 0,-2) . "." . substr($clean,-2);
谢谢你。但请检查输入2,222.765 –
可以skipp的郎代码,使其自动,所以你不到风度需要知道什么格式,用户要使用时,用户可能会瑞典和使用“1 234 567,89” –
我认为locale是一个必需的字符串,用于为特定区域设置解析正确格式的字符串。 – anubhava
不客气。 – anubhava