regex — форматирование цен в евро в переполнении стека

Я пытаюсь конвертировать некоторые цены:

[0] => EUR 19,06
[1] => 19, 70 €
[2] => 42.53 €
[3] => 18€65
[4] => 19,99 €
[5] => 18€65
[6] => 23€95
[7] =>      19,99 €

в этот формат: xx.xx €

Я использую это регулярное выражение:

/(EUR|)\s*(\d{1,})\s*(\.|,|€|€|)\s*(\d{1,}|)\s*(€|€| €| €|)\s*/

и эта маска в preg_replace:

$match = '${2}.$4 €';

Это работало отлично, КРОМЕ 5-й записи: 19,99 €.
Что не так с этим?

0

Решение

Я не вижу ошибок в вашем регулярном выражении, но оно может быть короче:

/^(?=.*(?:EUR|€|euro))\D*(\d+)\D*(\d*)\D*$/

и в качестве маскировать:

$match = '$1.$2 €';

Разъяснение:

^                   # from start
(?=.*               # positive lookahead
(?:EUR|€|euro)  # look for one of these
)                   # to take sure it is about € money
\D*(\d+)            # group at least + one digit in front of as many as possible non-digits
\D*(\d*)            # again to take the cents (* means zero or more)
\D*                 # take the remaining not digits
$                   # till the end

Regex живут здесь.

Надеюсь, поможет.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]