Вопрос

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

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

Разрешенный

  • 10
  • 100
  • 100.00

Не допускается

  • Буквенные Символы
  • 100,00
  • +/- 100

У меня есть поиск, и я перепробовал довольно много, но безуспешно.

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

Это было полезно?

Решение

if (preg_match('/^[0-9]+(?:\.[0-9]+)?$/', $subject))
{
    # Successful match
}
else
{
    # Match attempt failed
}

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

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

Итак

100.000

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

100.0001

обыкновение.

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

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

Другие советы

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

if (preg_match('/^\d+(\.\d{2})?$/', $subject))
{
   // correct currency format
} else {
  //invalid currency format
}

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

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

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

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

^(?:[1-9]\d+|\d)(?:\.\d\d)?$
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top