проверить входящие данные, float

Тема в разделе "PHP", создана пользователем sultan347, 21 авг 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. sultan347

    sultan347

    Регистр.:
    25 апр 2009
    Сообщения:
    230
    Симпатии:
    7
    ну, первым делом написал
    $aa = (float)trim($_POST["aa"]);
    $aa=htmlspecialchars(mysql_real_escape_string(strip_tags($aa)));

    Далее как его проверить, что там нет букв, символов кроме точки, значение цифры лежит в определенном диапозоне, допустим от 0 до 1200, дробный часть только двухразрядный... Если хотя одно нарушение есть, то в $error присваивается описание
     
  2. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    Вот эта строчка приводит данные к типу float:
    PHP:
    $aa = (float)trim($_POST["aa"]);
    В таком случае эта строчка не нужна:
    PHP:
    $aa=htmlspecialchars(mysql_real_escape_string(strip_tags($aa)));
    На заметку:
    htmlspecialchars используют не при записи в БД, а при выводе данных из нее. Функции mysql_real_escape_string вполне достаточно.

    Проверка на число с плавающей точкой:
    PHP:
    preg_match("/^-?\d+[\.|\,]?\d{1,2}$/",$aa)
    функция возвращает 1 если совпало и 0 если не совпало
     
    sultan347 нравится это.
  3. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    PHP:
    $aa is_float($_POST["aa"]) && $_POST["aa"]>&& $_POST["aa"]<1200 && number_format($_POST["aa"],2)==$_POST["aa"] ? $_POST["aa"] : false;
     
    sultan347 нравится это.
  4. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    Введи любое целое число без дробной части и твоя проверка слетает к чертям
     
  5. sultan347

    sultan347

    Регистр.:
    25 апр 2009
    Сообщения:
    230
    Симпатии:
    7
    PHP:
    preg_match("/^-?\d+[\.|\,]?\d{1,2}$/",$aa)
    Работает, пускает все флоат цифры, кроме "1.00", "2.00", "3.00",..., "9.00" (их надо бы разрешит). Буквы отсеялись, что хорошо, но цифра с двумя точками тоже проходить, например "5..00". И после дроби только две цифры надо, а то типа "12.1233" тоже проходять. Как поправить?
     
  6. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    PHP:
    preg_match("/^-?\d+[\.|\,]{1}?\d{1,2}$/",$aa)
     
  7. sultan347

    sultan347

    Регистр.:
    25 апр 2009
    Сообщения:
    230
    Симпатии:
    7
    PHP:
    1. $error "";
    2. $aa = (float)trim($_POST["aa"]);
    3. if (is_float($aa) == false) {$error="должна быть цифрой с плавающей точкой";}
    4. elseif ($aa 12) {$error "не может больше 12.";}
    5. elseif ($aa 0.01) {$error "должен быть больше нуля.";}
    6. elseif (number_format($aa,2) != $aa) {$error "В дробней части должно две цифры.";}
    Не пойму, если в таком виде, 2 строка даже буквы в флоат кастует чтоли, 3 строка все пропускает, если же 2 строку закоментировать, то наоборот, ничего не пропускает, даже цифр :-]. Как быть?
     
  8. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    ты читать умеешь нет? выше постом готовое регулярное выражение
     
  9. sultan347

    sultan347

    Регистр.:
    25 апр 2009
    Сообщения:
    230
    Симпатии:
    7
    :) Да понимаю что будет работать, но впервые сталкиваюсь с таким выражением, на взгляд как набор символов без логики, вот и решил идти, что роднее. Да и как его разбить на ошибки для вывода пользователю, что он не положенное ввел
     
  10. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    а зачем разбивать? регулярное выражение заменяет твои 6 строк быдлокода, которые к тому же некорректно проверяют. Можешь написать для пользователя в качестве примера форма входных данных. К примеру: 0.00
     
Статус темы:
Закрыта.