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} – одна или две цифры Добавить + после ] чтобы разрешить больше, чем один символ.