Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: проверка ввода числового значения

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: нужна функция проверяющая ввод именно числа
Конструктор
Отправлено: 06 Апреля, 2011 - 12:50:50
Post Id



Частый гость


Покинул форум
Сообщений всего: 128
Дата рег-ции: Апр. 2010  


Помог: 1 раз(а)




Пробую написать функцию PHP проверяющую ввод числового значения.
Пока не понял как это реализовать. В С++ я б наверное взял указатель на строку и в массиве перебрал бы все элементы..(не знаю насколько это было бы правильно..)
А как это сделать в PHP?
Нужно проверить что в поле введено число , а не символ или строка.
Пока нашел что нужно использовать регулярные выражения:
PHP:
скопировать код в буфер обмена
  1. // Если номер не соответствует шаблону ..
  2. if(!preg_match("|^[\d]*$|", $_POST['num']))
  3. {
  4.  // .. останавливаем скрипт и выводим на монитор сообщение
  5.  exit("Не верен формат числа.");    
  6. }

А как еще можно это сделать?
Регулярные выражения это лучший способ?

Вот куда хочу вставить функцию..
(проверяются ввод в поля a, b, c)
PHP:
скопировать код в буфер обмена
  1. <html>
  2. <head>
  3. <title>Решение квадратного уравнения</title>
  4. </head>
  5. <body>
  6. &radic<span style="text-decoration: overline;">  34&emsp</span>
  7. <div style="position: absolute; width: 400px; top: 100px; left: 350px; background-color: #fc0" align="center";>
  8. <?PHP
  9. /*надо добавить функцию проверки чисел
  10. */
  11. if(!preg_match("|^[\d]*$|", $_GET['a']))
  12. {
  13.  // .. останавливаем скрипт и выводим на монитор сообщение
  14.  exit("Не верен формат числа.");    
  15. }
  16. $a = $_GET['a'];
  17. $b = $_GET['b'];
  18. $c = $_GET['c'];
  19. echo '<form action="index.php" metod="GET">';
  20. echo '<input type="text" size="7" value="'.$a.'"; name="a">x<sup>2</sup> + ';
  21. echo '<input type="text" size="7" value="'.$b.'"; name="b">x + ';
  22. echo '<input type="text" size="7" value="'.$c.'"; name="c"> = 0 ;';
  23. echo '<p><input type=submit value="Решение"></p></form>';
  24.  
  25. echo "a = $a,<br> b= $b,<br> c = $c;<br>";
  26.  
  27. $d = $b * $b - 4 * $a * $c;
  28. echo "Дискриминант равен $d,<br>";
  29.  
  30. switch (true)
  31. {
  32.         case ($d<0): echo 'следовательно действительных решений нет <br>';
  33.                         break;
  34.        
  35.         case ($d==0): echo 'следовательно существует 1 решение:<br>';
  36.                 $x = (-$b )/2/$a;
  37.                         echo "x=$x.<br>"; break;
  38.        
  39.         case ($d>0): echo 'следовательно существуют 2 решения:<br>';
  40.                 $x1 = ((-$b + sqrt ($d))/2/$a);
  41.                         echo "x<sub>1</sub>=$x1;<br>";
  42.                
  43.                 $x2 = ((-$b - sqrt ($d))/2/$a);
  44.                         echo "x<sub>2</sub>=$x2.<br>"; break;
  45. }
  46. ?>
  47.        
  48. </div>
  49.  
  50. </body>
  51. </html>


-----
Если все время идти вперед, до цели будет немного ближе..
 
 Top
EuGen Администратор
Отправлено: 06 Апреля, 2011 - 12:55:47
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Целые is_int
вещественные is_float


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Конструктор
Отправлено: 06 Апреля, 2011 - 13:01:34
Post Id



Частый гость


Покинул форум
Сообщений всего: 128
Дата рег-ции: Апр. 2010  


Помог: 1 раз(а)




EuGen пишет:
Целые is_int
вещественные is_float

Тоесть мне можно написать так:



Это и будет проверкой что переменная $a - действительное число без символов?


-----
Если все время идти вперед, до цели будет немного ближе..
 
 Top
Ch_chov
Отправлено: 06 Апреля, 2011 - 13:06:23
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Конструктор пишет:
Регулярные выражения это лучший способ?

Нормальный способ.

EuGen пишет:
Целые is_int
вещественные is_float

Тогда нужно тип переменных изменить. Переменные из $_GET в данном случае имеют тип string независимо от того что в них находится цифры или строка.
Возможные варианты: http://www.php.su/ctype_digit " target="_blank">ctype_digit и is_numeric


Конструктор пишет:
$a = $_GET['a'];

Фильтруйте переменные приходящие от пользователя.

(Отредактировано автором: 06 Апреля, 2011 - 13:07:34)

 
 Top
Конструктор
Отправлено: 06 Апреля, 2011 - 13:12:22
Post Id



Частый гость


Покинул форум
Сообщений всего: 128
Дата рег-ции: Апр. 2010  


Помог: 1 раз(а)




Так нельзя?
if (is_numeric ( (double) $a) )
else ...

А что значит фильтровать? проверять в цикле?

(Отредактировано автором: 06 Апреля, 2011 - 13:13:53)



-----
Если все время идти вперед, до цели будет немного ближе..
 
 Top
EuGen Администратор
Отправлено: 06 Апреля, 2011 - 13:14:37
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Валидация - это отдельная вещь..
is_numeric((int)$a) всегда вернет true - так что нет смысла в такой проверке.
Просто is_numeric для строк и этого достаточно.
Регулярные выражения тоже хорошо, но мне, например, честно не хочется предусматривать всякие вещи наподобие 1.56E-20 и т.п.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Конструктор
Отправлено: 06 Апреля, 2011 - 13:25:12
Post Id



Частый гость


Покинул форум
Сообщений всего: 128
Дата рег-ции: Апр. 2010  


Помог: 1 раз(а)




Пока остановился на таком варианте:

PHP:
скопировать код в буфер обмена
  1. if ( (!is_numeric($a))||(!is_numeric($b))||(!is_numeric($c)) )
  2. {
  3.  // .. останавливаем скрипт и выводим на монитор сообщение
  4.  exit("Не верен формат числа.");    
  5. }


А на будущее попробую разобраться в регулярных выражениях , пока не пойму что это вообще такое..
Нашел книгу Фридл - Регулярные выражения.3ed.2008 .. постмотрим..

(Отредактировано автором: 06 Апреля, 2011 - 13:57:02)



-----
Если все время идти вперед, до цели будет немного ближе..
 
 Top
WebNetc
Отправлено: 06 Апреля, 2011 - 16:49:49
Post Id


Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Используй регулярки
if(!preg_match("/^[0-9]{1}$/",$a))
{ echo "Неверный формат числа! <br/> Можно использовать только цифры"; }
else
{ //ваши фун-ии и сам скрипт }
в данном случае мы запрещаем вводить слэш - "/", использовать цифры можно только от 0 до 9 (в квадратных скобках), кол-во введенных чисел - 1 (в системных скобках). Переменная назначается после. В данном случае "$a".
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB