Регулярное выражение валюты PHP
Вопрос
Я пытаюсь найти фрагмент регулярного выражения, соответствующий значению валюты.
Я хотел бы сопоставлять только числа и 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)?$