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