Как проверить, является ли введенное значение валютой

Как проверить, является ли введенное значение валютой. Предпочтительно регулярное выражение или функция php.

(значения, такие как 1550.50, 1500 или 100.75)

Ответы

Ответ 1

Я предполагаю, что вы действительно хотите, чтобы указать любое число из числа, которое имеет смысл в качестве значения валюты. Поэтому 1.04e-7, вероятно, не должен совпадать, и не должен 1.234 или 12.3, хотя все, конечно, являются числовыми.

Наконец, вам следует ожидать, что разделители тысяч, такие как 1,234.56 (которые, как и десятичная точка, также могут варьироваться в зависимости от локалей). Поэтому, предполагая, что вы когда-либо хотите проверять валютные значения, используя точку в качестве десятичного разделителя и запятую в качестве необязательного разделителя тысяч, попробуйте следующее:

/\b\d{1,3}(?:,?\d{3})*(?:\.\d{2})?\b/

Объяснение:

\b      # word boundary assertion
\d{1,3} # 1-3 digits
(?:     # followed by this group...
 ,?     # an optional comma
 \d{3}  # exactly three digits
)*      # ...any number of times
(?:     # followed by this group...
 \.     # a literal dot
 \d{2}  # exactly two digits
)?      # ...zero or one times
\b      # word boundary assertion

Ответ 2

Я использую это:

function isCurrency($number)
{
  return preg_match("/^-?[0-9]+(?:\.[0-9]{1,2})?$/", $number);
}

//usage examples
echo (isCurrency("10.36") ? "TRUE" : "FALSE");
echo (isCurrency(10.3) ? "TRUE" : "FALSE");

Остерегайтесь:

  • эта функция принимает также отрицательные значения валюты, если вы не хотите их принимать, удалите -?, который вы найдете в начале preg_match

  • эта функция возвращает TRUE также для таких значений, как 13.7 (только одно десятичное число), если вы хотите, чтобы десятичное значение всегда было два, чем заменить {1,2} на {2} (но прежде, чем делать эту точку чтения 3 ниже)

  • эта функция возвращает TRUE также для таких значений, как 0000.78 (более одного начального нуля), но обычно такая функция нужна для фильтрации значения, представленного формами, прежде чем вставлять их в поля БД типа DECIMAL(n.2). При вставке в такие поля MySQL принимает как 0000.78, так и 13.7 как допустимые значения в запросе и автоматически преобразует их в 0.78 и 13.70

Ответ 3

Вы не можете быть уверены. Пользователь может думать о цыплятах. Вам нужно проверить, введен ли пользователь поплавком. Посмотрите на preg_match: http://jp2.php.net/manual/en/function.preg-match.php

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

Ответ 4

Использовать функцию PHP money_format.