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