PHP

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

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

Урок закончен.
Добавлено: 23 Августа 2013 11:46:19 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...