Консультация № 175756
01.01.2010, 13:46
0.00 руб.
0 9 1
Здравствуйте.
Как реализовать следующее. Есть edit. Нужно считать оттуда число с плавающей запятой и сравнить его с константой. Сделать проверку на недопустимые символы(буквы).
Всех с Новым Годом!

Обсуждение

Неизвестный
01.01.2010, 14:38
общий
это ответ
Здравствуйте, Sager.
Задачка не такая сложная. Все в приложении.
Надеюсь, там все понятно.
С наступившими праздничками!

Приложение:
<form>
Enter number to check...<input type="text" name="my_edit">

<input type="submit" value="Check!">
</form>
<?php echo "<body bgcolor=#000040 text=#aaaaaa><font size=5>"; error_reporting(E_ALL);
define("CONSTANTA", 45.32);
if (preg_match_all("/\d+\.?\d+/", @$_REQUEST['my_edit'], $result)){
if ($result[0][0]==CONSTANTA) echo "Ok!";
else echo "Not equal...";
}
else echo "Please enter number...";
echo "</font></body>";?>
давно
Специалист
742
345
01.01.2010, 15:12
общий
Почему-то происходит переход на страницу /index.php?my_edit=22.2 (22.2 это число я ввёл).
И всё время выведена надпись Please enter number... (я ведь ещё не успел ничего ввести)
Неизвестный
01.01.2010, 17:09
общий
Sager:
естесственно будет вызываться текущая страница, так как я написал максимально кратко. Если нужно, чтобы вызывался скрипт proverka.php из подкаталога scripts, то измените тег form:
<form action="scripts/proverka.php" method="post">. В этом случае РНР-код должен быть в файле proverka.php, а не в index.html.
method=post --- это для того, чтобы данные передавались не через адресную строку, а в теле заголовка запроса.
Я слегка подправил код, в частности регулярное выражение:
Код:

<form>
Enter number to check...<input type="text" name="my_edit">

<input type="submit" value="Check!">
</form>
<?php echo "<body bgcolor=#000040 text=#aaaaaa><font size=5>"; error_reporting(E_ALL);
define("CONSTANTA", 45.32);
if (preg_match("/^\d+\.?\d+$/", @$_REQUEST['my_edit'], $result)){
if ($result[0]==CONSTANTA) echo "Ok!";
else{
echo "Not equal...
"; echo "<pre>"; print_r($result); echo "</pre>";
}
}
else if (isset($_REQUEST['my_edit'])) echo "Please enter number...";
echo "</font></body>";?>
Неизвестный
01.01.2010, 21:27
общий
Sager:
Цитата: korsar
Почему-то происходит переход на страницу /index.php?my_edit=22.2 (22.2 это число я ввёл).


Это происходит потому, что для передачи данных скрипту используется метод GET. В этом случае передача происходит через строку запроса. Если такие варианты Вам не нравятся, лучше использовать POST. Причем использовать где ни попадя массив $_REQUEST - плохая практика. Используйте массив $_GET, если передаете данные методом GET, или $_POST, если используете метод POST.
Неизвестный
01.01.2010, 21:29
общий
Диверсант:
Цитата: 313069
я написал максимально кратко
Хоть статус "1-ый класс" и не обязывает Вас знать, КАК надо давать хорошие ответы, позвольте дать Вам совет: не надо описывать все максимально кратко. Пишите так, чтобы было понятно любому здравомыслящему существу. Надеюсь, повторять это мне Вам больше не придется.
Неизвестный
01.01.2010, 21:30
общий
ЗЫ Всех с праздниками
Неизвестный
01.01.2010, 21:37
общий
Товарищ Бородин:
Товарищ, вопрос стоял о разборе и обработке введенной строки пользователем, и не касался методов передачи этих самых данных в скрипт и обратно. я описал алгоритм (чуть позже подправленный) решения конкретно поставленной задачи, и он работает.
а то, как уважаемый Sager этим методом воспользуется зависит исключительно от него.
Я бы не сказал, что Ваши ответы, уважаемый Товарищ Бородин, отличаются понятливостью и всеобъемливостью, хотя не будем переходить на личности.
Вы лушче подскажите - правильно ли я составил регулярное выражения для решения задачи? Может быть предложите свое?
Неизвестный
01.01.2010, 21:58
общий
Диверсант:
"Меряться кулаками" не надо, я не уверен, что результат будет в Вашу пользу(и мой статус модератора тут ни при чем) - если хотите, можем вынести вопрос качества моих и Ваших ответов на всеобщее обозрение, но я бы из скромности этого делать не стал. Ответы "понятливостью" отличаться в принципе не могут, потому что понятливость - это прерогатива лиц суть одушевленных.

Цитата: 313069
хотя не будем переходить на личности

Какой Вы, однако, снисходительный!

Теперь по существу. Это рассылка, в которой администратором являюсь я. И если Вы попытаетесь переходить на личности, то придется принимать меры. Я не играю перед Вами мускулами и не раздуваю попусту ноздри, а всего лишь даю понять: я здесь - контроль качества ответов. И если я вижу, что ответ можно улучшить, то будьте добры, принимайте к сведению. Тем более, что по самому содержанию ответа Вашего я никаких претензий не высказывал - всего лишь прививаю Вам стиль, который не только я считаю правильным и подходящим для сего Портала. Свой статус модератора я получил не за красивые глазки, а заработал этими самыми "непонятливыми и невсеобъемливыми ответами", так что извольте соблюдать субординацию, или уж хотя бы сдать первый экзамен.

Что касается Вашего регулярного выражения, то нареканий у меня к нему нет, кроме единственного: запрашивалось число с плавающей запятой, а не с плавающей точкой. Но я не считаю, что это серьезно, потому что исправить сие - не проблема. Проблема в том, что опытному глазу видно, что вопрошающий в PHP малосведущ, ибо "плавает" в достаточно элементарных вещах, поэтому задача эксперта - не решить конкретную задачу, а упредить дальнейшие вопросы на эту тему и сопутствующие ей. А это возможно тогда, когда эксперт поймет на клеточном уровне, чего Вы ему написали.

Повторяю, что суть не в содержании, а в оформлении. Но не надо думать, что содержание - это все. Даже правильный ответ Вам не будет засчитан на экзамене, если Вы его плохо подадите. А уж в том, что теперь я тщательно разберу ВСЕ Ваши ответы по PHP, когда Вам придет пора сдавать экзамен, можете даже не сумлеваться.
Неизвестный
02.01.2010, 21:48
общий
Цитата: 20833
Что касается Вашего регулярного выражения, то нареканий у меня к нему нет, кроме единственного: запрашивалось число с плавающей запятой, а не с плавающей точкой. Но я не считаю, что это серьезно, потому что исправить сие - не проблема.

Цитата: vikipedia
Так как в некоторых, преимущественно англоязычных и англофицированных, странах (см. подробный список Decimal separator (англ.)) при записи чисел целая часть отделяется от дробной точкой, то в терминологии этих стран фигурирует название «плавающая точка» (floating point (англ.)). Так как в России целая часть числа от дробной традиционно отделяется запятой, то для обозначения того же понятия используется термин «плавающая запятая»
...
Структура числа

Число с плавающей запятой состоит из:

* Мантиссы (выражающей значение числа без учёта порядка)
* Знака мантиссы (указывающего на отрицательность или положительность числа)
* Порядка (выражающего степень основания числа, на которое умножается мантисса)
* Знака порядка

В вычислительных машинах показатель степени принято отделять от мантиссы буквой "E" (exponent). Например, число 1,528535047 × 10-25 в большинстве языков программирования высокого уровня записывается как 1.528535047E-25.
.


Исходя из этого определения, на мой взгляд, регулярное выражение следует переписать с учётом возможности записи числа в виде [знак числа]{мантисса}{e|E}{знак порядка}{порядок}, то есть
preg_match("/^-?\d+[\.,]{0,1}\d+((e|E)(+|-)\d+)?$/", @$_REQUEST['my_edit'], $result) - ув. тов. Бородин, поправьте меня, пожалуйста, если я не прав.

И ещё:
Цитата: 20833
Повторяю, что суть не в содержании, а в оформлении.

Это сильно ))) то есть, другими словами, в ответ можно процитировать Ленина и это будет правильно, если правильно оформлено? зачОт )))
Форма ответа