Php Preg_match:如何从字符串中读取点分隔数字(从1到3位)(货币值)?
例如:Php Preg_match:如何从字符串中读取点分隔数字(从1到3位)(货币值)?,php,regex,Php,Regex,例如: 30€ 30,00€ 1.450€ 798.000.000,00€ 12.567.789.985,00€ 如何将它们转换为整数值 我不能使用intval(),因为它可能出现在字符串中实际值之前的不同数字。首先删除$符号 $num = substr("30€", 0, -1); 然后用str_替换删除空格和“.”或“.” $num = str_replace( '.', '', $num ); $num = str_replace( ',', '', $num ); 应该是整数,试试
30€
30,00€
1.450€
798.000.000,00€
12.567.789.985,00€
如何将它们转换为整数值
我不能使用intval(),因为它可能出现在字符串中实际值之前的不同数字。首先删除$符号
$num = substr("30€", 0, -1);
然后用str_替换删除空格和“.”或“.”
$num = str_replace( '.', '', $num );
$num = str_replace( ',', '', $num );
应该是整数,试试看!
希望这有帮助你总是以
€
结尾吗
如果是,请尝试以下方法:
$number = preg_replace('/[^\d]/', '', preg_replace('/.*?([\d\.,]+)€.*/', '$1', $i));
这将搜索数值前后有任何字符的任何字符串,并仅返回数字(无逗号、句点或欧元符号)。您可以不使用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
)
Oh的可能副本,如果有人想要复制并粘贴工作副本: