Как проверить, является ли введенное значение валютой. Предпочтительно регулярное выражение или функция php.
(значения, такие как 1550.50, 1500 или 100.75)
Как проверить, является ли введенное значение валютой. Предпочтительно регулярное выражение или функция php.
(значения, такие как 1550.50, 1500 или 100.75)
Я предполагаю, что вы действительно хотите, чтобы указать любое число из числа, которое имеет смысл в качестве значения валюты. Поэтому 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
Я использую это:
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
Вы не можете быть уверены. Пользователь может думать о цыплятах. Вам нужно проверить, введен ли пользователь поплавком. Посмотрите на preg_match: http://jp2.php.net/manual/en/function.preg-match.php
Вам также нужно спросить себя, хотите ли вы попытаться работать с тем, что вводил пользователь, или если вы хотите отклонить его и принять только точный формат.
Использовать функцию PHP money_format.