PHP регулярное выражение, чтобы найти незашифрованный символ евро - PullRequest
2 голосов
/ 05 июля 2011

Я в PHP. Я хотел бы найти числа в предложении, которые начинаются с символа валюты и возвращают число. Для поиска "я потратил 100 евро на обувь" и вернем "100".

У меня это работает за $ и £:

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

Но добавление символа евро не работает. (Предложения приходят из разобранных писем, поэтому мне не нужно искать & euro;);

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

Я нашел следующее на SO: регулярное выражение для валюты (евро) Но это не кодирует символ евро.

Чтобы закодировать символ евро, я пробовал:

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

Но не могу понять это. Любая помощь?

Ответы [ 2 ]

1 голос
/ 05 июля 2011

Когда я вставлю это в:

 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}))#

0 голосов
/ 05 июля 2011

Как насчет замены символа евро чем-то другим?Например:

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