Как проверить, является ли введенное значение валютой
Как проверить, является ли введенное значение валютой. Предпочтительно регулярное выражение или функция 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.