1.449,00 1.000.000,55 19,90 etc etc
Я знаю, что перечисленные выше являются очень переменными, но есть возможности для валюты. Я ищу пример preg_match()
или любую другую функцию для рассмотрения возможных случаев выше. Я попытался с примером ниже, но он работает неправильно. Любой шанс дал мне наиболее подходящий образец для этого?
if (! preg_match('/^[0-9.,]$/', $currency)) { echo 'No good.'; }
Что-то вроде этого должно работать:
/^((?:\d{1,3}[,\.]?)+\d*)$/
Это соответствует:
^ - Start of string ( - Capture the following: (?: \d{1,3} - One to three digits [,\.]? - And an optional separator (comma or period) )+ - One or more times \d* - Zero or more digits ) $ - End of string
Он работает, итеративно сопоставляя все с левой стороной разделителя (если он присутствует), а затем имеет \d*
для сбора любых необязательных долей валюты.
Вы можете видеть, что он проходит все ваши тесты .
Изменить: обновленное регулярное выражение выглядит так:
^((?:\d\.\d{3}\.|\d{1,3}\.)?\d{1,3},\d{1,2})$
Где мы сопоставляем:
\d\.\d{3}\.
– Одна цифра, период, три цифры, период, ИЛИ \d{1,3}\.
– одна и три цифры, период ?
) Затем мы сопоставляем:
\d{1,3},
– от одной до трех цифр и запятой, а затем \d{1,2}
– одна или две цифры Добавить +
после ]
чтобы разрешить больше, чем один символ.