Preg_match:如何从字符串中读取点分隔的数字(从1到3位数字)(货币值)


Preg_match: How to read the point seperated Digits (from 1 up to 3 digits) (money value) from a string?

例如:

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
)