PHP: Data Validator v1.0
| Представляю вашему вниманию универсальную функцию для проверки значений переменных, которая с успехом может использоваться для проверки переданных данных, например через $_POST, $_GET etc. Функция может проверять имеет ли переменная пустое значение, максимальную и минимальную длину строки, а также проверять строку по заданному регулярному выражению. На данный момент функция имеет встроенное регулярное выражение для проверки правильности формата адреса электронной почты. В дальнейшем планируется добавить возможность проверки гиперссылок. Для более детальной информации смотрите ниже предоставленный код.
PHP:
/**
/* PHP function Data Validator v1.0
/* author: polo
/* website: http://netadmin.ws
/* Функция для проверки ошибок в переменных.
/* Идеально подходит для проверки введенной пользователем информации.
/* В качестве первого аргумента получает проверяемый массив,
/* в нашем случае может быть $_POST, $_GET...
/* В качестве второго аргумента должна получить массив с параметрами для каждого поля
/* ключи массива должны совпадать с ключами проверяемого массива.
/* Пример массива параметров:
/* array(
/* 'field_name' => array(
/* 'req' => boolean, // может ли поле иметь пустое значение
/* 'regexp' => string, // валидное регулярное выражение PCRE для проверки значения поля или 'email' для проверки email адреса
/* 'min' => int, // минимальное значение поля
/* 'max' => int, // максимальное значение поля
/* 'unset' => boolean // удалить переменную в случае ошибки
/* )
/* )
*/
function validate_data(&$arry, $params)
{
// массив ошибочны переменных
$error = array();
// сообщения которые будут выдаваться как ошибки
$phrase = array(
'req' => 'Поле обязательно',
'bad' => 'Неверный формат',
'short' => 'Слишком короткое. Должно содержать не менее %s символов.',
'long' => 'Слишком длинное. Должно содержать не более %s символов.'
);
// проходимся по массиву параметров и проверяем на валидность
foreach ($params AS $f_name => $f_info)
{
if ($f_info['req'] AND strlen($arry[$f_name]) == 0) // обязательно ли поле, пустое?
{
$error[$f_name] = $phrase['req']; // устанавливаем ошибку для данного поля
if ($f_info['unset']) // удаляем переменную если требуется
{
unset($arry[$f_name]);
}
}
elseif(($f_info['min'] AND $f_info['min'] > 0) AND (($len = strlen($arry[$f_name])) > 0 AND $len < $f_info['min'])) // миниму символов
{
$error[$f_name] = sprintf($phrase['short'], $f_info['min']);
if ($f_info['unset'])
{
unset($arry[$f_name]);
}
}
elseif(($f_info['max'] AND $f_info['max'] > 0) AND strlen($arry[$f_name]) > $f_info['max']) // максимум символов
{
$error[$f_name] = sprintf($phrase['long'], $f_info['max']);
if ($f_info['unset'])
{
unset($arry[$f_name]);
}
}
elseif (($f_info['regexp'] AND !empty($f_info['regexp'])) AND !empty($arry[$f_name])) // проверяем по регулярному выражению
{
switch ($f_info['regexp'])
{
case 'email':
// обратный слеш между & и '
$regexp = '#^[a-z0-9.!#$%&'*+-/=?^_`{|}~]+@([0-9.]+|([^s]+.+[a-z]{2,4}))$#si';
break;
//case 'url': TODO
default:
$regexp = $f_info['regexp'];
}
if (!preg_match($regexp, $arry[$f_name]))
{
$error[$f_name] = $phrase['bad'];
if ($f_info['unset'])
{
unset($arry[$f_name]);
}
}
}
} // end foreach
return $error;
}
Скрипт для проверки работы: PHP:
<?php
// скрипт проверки Data validator
$show_form = true;
$error = null;
$fields_check = array(
'name' => array(
'req' => true,
'regexp' => '',
'min' => 6,
'max' => 60,
'unset' => false
),
'email' => array(
'req' => true,
'regexp' => 'email',
'min' => 6,
'max' => 60,
'unset' => false
),
'phone' => array(
'req' => false,
'regexp' => '#+{0,1}[0-9 -]+#', // обратный слеш перед первым плюсом
'min' => 7,
'max' => 25,
'unset' => true
)
);
if ($_SERVER["REQUEST_METHOD"] == 'POST')
{
$show_form = false;
$error = validate_data($_POST, $fields_check);
if (empty($error))
{
echo 'Все верно. Можно продолжать.';
}
else
{
$show_form = true;
}
}
if ($show_form)
{
?>
<form id="form" name="form" method="post" action="test.php">
Полное имя*:
<input name="name" type="text" id="name" tabindex="1" value="<?php echo $_POST['name']; ?>" size="50" />
<?php if($error['name']) echo '<font color="red" size="1">' . $error['name'] . '</font>'; ?>
<br />Email*:
<input name="email" type="text" id="email" tabindex="2" value="<?php echo $_POST['email']; ?>" size="50" />
<?php if($error['email']) echo '<font color="red" size="1">' . $error['email'] . '</font>'; ?>
<br />Телефон :
<input name="phone" type="text" id="phone" tabindex="3" value="<?php echo $_POST['phone']; ?>" size="50" />
<?php if($error['phone']) echo '<font color="red" size="1">' . $error['phone'] . '</font>'; ?>
<br /><br />
<input type="submit" name="Submit" value="Отправить" />
</form>
<?php
}
?>
Посмотреть рабочую версию функции
Обсуждение статьи
Примечание: Данная статья является собственностью netadmin.ws, любое ее использования за пределами сайта netadmin.ws строго воспрещается.
|
|
| |
 |
Авторизация
|
 |
Смотрите также
|
|