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

Опубликовано: 14 Авг 2017

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

Проверка 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 в противном случаи.

Комментарии (0)


Оставить комментарий




Разрешённые теги: <b><i><br>Добавить новый комментарий: