Регулярное выражение валюты PHP - PullRequest
3 голосов
/ 02 мая 2009

Я пытаюсь найти часть регулярного выражения, соответствующую значению валюты.

Я бы хотел сопоставить только цифры и 1 десятичную точку, т.е.

Разрешено

  • 10
  • 100
  • 100,00

Не разрешено

  • Альфа-символы
  • 1024 * 100,00 *
  • + / - 100

Я искал и перепробовал немало без удачи.

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

Ответы [ 4 ]

4 голосов
/ 16 апреля 2012

Как насчет этого

if (preg_match('/^\d+(\.\d{2})?$/', $subject))
{
   // correct currency format
} else {
  //invalid currency format
}
4 голосов
/ 02 мая 2009
if (preg_match('/^[0-9]+(?:\.[0-9]+)?$/', $subject))
{
    # Successful match
}
else
{
    # Match attempt failed
}

Примечание : если вы хотите ограничить количество десятичных разрядов, вы можете сделать что-то вроде этого:

/^[0-9]+(?:\.[0-9]{1,3})?$/im

So

100.000

будет соответствовать, тогда как

100.0001

привычка.

Если вам нужна дополнительная помощь, оставьте комментарий.

PS Если можете, используйте средство форматирования чисел, опубликованное выше. Нативные функции всегда лучше (и быстрее), в противном случае это решение вам пригодится.

1 голос
/ 02 мая 2009

Возможно, вы захотите рассмотреть другие альтернативы использованию регулярного выражения.

Например, есть класс NumberFormatter, который предоставляет гибкие числа и валюту синтаксический анализ и форматирование со встроенной поддержкой интернационализации.

Он встроен в PHP 5.3 и более поздние версии и доступен как расширение в более ранних версиях PHP 5.

0 голосов
/ 02 мая 2009

Попробуйте это регулярное выражение:

^(?:[1-9]\d+|\d)(?:\.\d\d)?$
...