Intereting Posts
Какое регулярное выражение используется для преобразования этой строки в массив? проблема с unserialize в php jQuery JSON Templating из MySQL Помощник даты и времени для PHP (например, Joda-Time в Java) PHP читает файл cookie, который находится в другом домене SQLSTATE : Нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется Yii 1.1.3 установка выбранного значения зависимого выпадающего списка Как получить контент метаописания с помощью Goutte PHP получает реальный IP (определение прокси) Ошибка входа в мой код после ввода правильных данных для входа (например, имя пользователя и пароль), код в php и jquery php удаляет определенную папку и все ее содержимое Различные стили CSS для последнего элемента php-массива PHP. Является ли htmlentities () достаточным для создания xml-безопасных значений? Mysql: результаты последних семи дней Получите удаленный размер файла, используя URL-адрес в PHP

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

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

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

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

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

  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 .