Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Preg_match:如何从字符串中读取点分隔数字(从1到3位)(货币值)?_Php_Regex - Fatal编程技术网

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的可能副本,如果有人想要复制并粘贴工作副本: