例如:
30€
30,00€
1.450€
798.000.000,00€
12.567.789.985,00€
如何将它们转换为整数值?
我不能使用interval(),因为它可能在字符串的实际值之前出现不同的数字。
你总是以€
结尾吗?
如果是,试试这个:
$number = preg_replace('/[^'d]/', '', preg_replace('/.*?(['d'.,]+)€.*/', '$1', $i));
这将搜索在数值之前或之后具有任何字符的任何字符串,并只返回数字(没有逗号,句号或欧元符号)。
首先去掉$符号
$num = substr("30€", 0, -1);
然后删除空格和'。' or ',' with str_replace
$num = str_replace( '.', '', $num );
$num = str_replace( ',', '', $num );
应该是一个整数。试一试!希望对大家有所帮助
您可以不使用regexp
$str='798.000.000,00€';
$res = strtr($str,array("." => "", "€" => "","," => "."));
var_dump(intval($res));
您应该指定如何处理小数点后的数字。你想忽略它们还是保留它们?我认为浮动更合适。如果是这样,将点(仅用于分组)替换为货币符号,并将","替换为适当的小数点,并将值转换为浮点数。这里还有一个解析函数
所有的数字都有一个共同的模式,正则表达式应该匹配这个模式来提取数字。然后可以将找到的数字转换为整数值:
$str = '30€
30,00€
1.450€
798.000.000,00€
12.567.789.985,00€';
$pattern = '~[1-9]'d{0,2}(?:'.'d{3})*~';
$r = preg_match_all($pattern, $str, $matches);
$intValues = array_map(function($v) {return (int) str_replace('.', '', $v);}, $matches[0]);
print_r($intValues);
输出:Array
(
[0] => 30
[1] => 30
[2] => 1450
[3] => 798000000
[4] => 2147483647
)