PHP正则表达式找到未编码的欧元符号

时间:2011-07-05 16:26:29

标签: php regex euro

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

我有这个工作的$和£:

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

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

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

我在SO上发现了以下内容: regex for currency (euro) 但它不编码欧元符号。

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

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

但无法弄清楚。有什么帮助吗?

2 个答案:

答案 0 :(得分: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}))#

答案 1 :(得分:-1)

用其他东西替换欧元符号怎么样? E.g:

$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);