PHP уроки
ПРОСТО самая лучшая обучалка PHP!
  • Студия LPHPRU
  • Уроки PHP
  • Контакты
  • Помощь
Меню
  • PHP - с чего начать?
  • Уроки PHP
  • Функции PHP
  • Массивы
  • Denwer
  • MySQL
  • Информация
  • Dreamweaver уроки
  • JQuery уроки
  • Галерея
Календарь
Март (2021)
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
293031    
В продаже

  • Что нового?

    • Тест №2
    • Тест №1 для разработчиков
    • PHP 5.6 RC1
    • SQL. Как cкопировать данные одной колонки в другую, в той же таблице
    • GRUB изменить порядок загрузки OS в Linux
    • SSH - вход на сервер без ввода пароля
    • PhpMyAdmin - проблема с загрузкой большого файла на сервер
  • Комментарии

    • тут нечего не понятно
    • Может уже пора на WebStorm переходит...
    • Здравствуйте. 10 лет пользуюсь др...
    • Была такая проблема, решалась пе...
    • Возможно с течением времени этот...
  • TOP-5

    • Метод POST (2939962)
    • Привет, МИР! (907179)
    • Метод GET (661917)
    • Операторы (601792)
    • Firefox уже запущен, но не отвечает... (347165)

Проверка корректности ввода числа.

Главная » Уроки PHP » Проверка корректности ввода числа.
PHP урок № 157

Идентифицируем число

Проверка HTML-формы для ввода числового значения является часто необходимой задачей. При разработки приложений разработчик может подразумевать, что в HTML-форму должно вводится какое то числовое значение, хотя не факт, что пользователь в место номера телефона не введёт в поле какое нибудь слово, т.е. строку или того хуже программу на исполнение, которая может как минимум нарушить правильную работу скрипта, а как максимум удалить важные данные. Тут всё зависит от подготовленности злоумышленника и его намерений. О защите приложений нужно говорить отдельно, но непременный минимум нужно соблюдать всегда в целях избежать последствий такого "подарка".
Для проверки ввода числа в PHP введён специальный класс \d. Так же следует указать явно начало (^) и конец ($) строки (это символы регулярных выражений), иначе после того как будет введена одна цифра можно будет писать что угодно.

Есть интересная и лучшая книга, для изучения регулярных выражений, написал Джеффри Фридл. С электронной версией можно ознакомится и скачать бесплатно здесь.

Листинг № 1 - Шаблон проверки целого числа

|^[\d]*$|
Для того чтобы проверить число с плавающей точкой, необходимо добавить к шаблону разделитель целой и дробной части, т.е. точку.

Листинг № 2 - Шаблон проверки числа с плавающей точкой

|^[\d]*\.[\d]*$|
Возможен так же вариант с разделителем запятой. Чтобы можно было вводить точку или запятую в качестве разделителя, слегка изменим шаблон.

Листинг № 3 - Шаблон проверки числа. В качестве разделителя - точка или запятая

|^[\d]*[\.,]?[\d]*$|
Идентификацию числа можно реализовать примерно так:

Листинг № 4 - Проверка HTML-формы предназначенной для ввода числа

<?php 

// Обработчик HTML-формы 
// Если оба поля заполнены
if(isset($_POST['num']) && isset($_POST['cena']))
{
// Если номер не соответствует шаблону ..
if(!preg_match("|^[\d]*$|", $_POST['num']))
{
 
// .. останавливаем скрипт и выводим на монитор сообщение
 
exit("Не верен формат числа.");    
}
        
// Если номер не соответствует шаблону ..
if(!preg_match("|^[\d]*[\.,]?[\d]*$|", $_POST['cena']))
{
 
// .. останавливаем скрипт и выводим на монитор сообщение
 
exit("Не верен формат цены.");    
}
        
echo 
" Общая стоимость товара: <strong>" .
number_format($_POST["num"] * $_POST["cena"], 2, '.', ' ') .
" </strong>руб.";
}
    
// Сама форма для ввода чисел
echo "<p>Кол-во DVD дисков: </p>
<form name='form1' method='post' action=''>
             
<label>
 <input name='num' type='text' id='textfield' size='10' maxlength='10'>
</label>
             
<p>Цена за диск:</p>
             
<label>
<input name='cena' type='text' id='textfield2' size='20' maxlength='20'>
</label>
             
 <p>
<label>
 <input type='submit' name='button' id='button' value='Сумма'>
</label>
</p>
</form>"
;
        
?>

Листинг № 5 - Функция идентификации десятичного числа

<?php
function chislo($chislo)
{
    if(isset(
$chislo))
    {
        if(
preg_match("|^[\d]*$|", $chislo))    
        {
          return 
TRUE;    
        }
        else
        {     
           return 
FALSE;
        }
    }
}
?>
Функция представленная в листинге 5, возвращает TRUE если это число и FALSE в противном случаи.

Урок закончен.

Обсудить на форуме

SETTER © LPHP.RU
Администрация сайта
24.08.2009 12:42:25

Понравился урок? Не пропусти следующий!
Рекомендованные уроки этого раздела:
  • Проверка чётности числа
  • Имя пользователя.
  • Zend Framework 2 установка
  • Проверка квадратного уравнения

Напишите свой комментарий
Ваше имя
Сообщение
Введите цифры с картинки:
 

Комментарии

anonymous 08.12.2011 13:36:22
Листинг № 3 правельнее будет не так |^[\d]*[\.,]?[\d]*$| а так |^[\d]+[\.,]?[\d]+$| Потому что в первом варианте числа вида .5555 и 555. считаються нормальными
andrew 22.02.2012 13:20:57
Шаблон ошибочен. 1. Если в начале/конце строки есть пробелы - он будет считать, что это не число 2. Пустую строку он воспринимает как число. 3. Точка без цифр будет воспринята как число Правильнее: |^\s*\d+\s*$| |^\s*\d+([.,]\d+)?\s*$|
SETTER 22.02.2012 14:25:46
Абсолютно не верно! Если будут стоять пробелы, значит значение переменной не соответствует шаблону. Потому что в шаблоне чётко прописано, что десятичная цифра идёт от начала строки, а не после пробела! Все данные которые попадают в базу или проходят проверку на валидность должны строго отвечать своему типу данных. Если проверяется число и мы заранее об этом знаем, значит пробелов в конце и в начале не может быть. Если человек случайно вписывает число после пробела, значит следует использовать в проверке данных функцию trim() - которая убирает пробелы в начале строки и в конце. Шаблоны все верны!
Андрей 04.07.2013 09:07:04
Спасибо!Доступно и понятно!Про trim это уже при желании можно указать так как и ht m lsp eci alch ars так и др функции,Админу респект за понятный и не громозкий код,сайт в закладки добавил!Удачи всем рнр программерам)
Вася 18.12.2013 03:04:38
is_numeric() is_int()
  • Яндекс.Метрика Здесь находится аттестат нашего WM идентификатора 185571665285
  • "LPHPRU" © 2009-2021