2

我在 PHP 中。我想在以货币符号开头的句子中查找数字,并返回该数字。搜索“我在鞋子上花了 100 欧元”并返回“100”。

我已经为 $ 和 £ 工作了:

'/[$£]([0-9.]{1,})/'

但是添加 € 欧元符号不起作用。(句子来自解析的电子邮件,所以我不需要找到€);

preg_match_all('/[€]([0-9.]{1,})/', $sentence, $match);

我在 SO 上找到了以下内容: 货币正则表达式(欧元) 但它不编码欧元符号。

为了编码欧元符号,我尝试过:

/[\x{20ac}]([0-9.]{1,})/u
"[^-a-zA-Z0-9.:,!+£$ \\ ". chr(164) ."]"

但是想不通。有什么帮助吗?

4

2 回答 2

1

当我把它放进去时:

 echo preg_match("#€[0-9]{1,}#", "€1" )?1:0;

我明白1了,所以你可能不需要 unicode。但是,如果您仍然想使用 UTF-8,我发现这是 PHP 文档下的注释。

function unichr($u) {
    return mb_convert_encoding('&#' . intval($u) . ';', 'UTF-8', 'HTML-ENTITIES');
}

要获得€,您调用unichr(8364). 用它代替上面的欧元符号,你会很好。(我觉得我应该注意:我将两者都测试为 unicode 版本:

preg_match("#".unichr(8364)."\s*([0-9]{1,})#u", unichr(8364). "1" )?1:0;

你可能想先做str_replace('€', unichr(8364), $str);...

PS。您可能还希望允许使用空格和小数:#€\s*([0-9]{1,}(\.?[0-9]{2}))#

于 2011-07-05T17:10:36.380 回答
-1

用别的东西代替欧元符号怎么样?例如:

$str = 'I spent €100 on shoes.';
$tempStr = str_replace('€', '$', $str);
//$tempStr now contains: I spent $100 on shoes.

preg_match_all('/[€]([0-9.]{1,})/', $tempStr, $match);
于 2011-07-05T17:19:06.283 回答