Использование filter_var () вместо регулярных выражений

1 Star2 Stars3 Stars4 Stars5 Stars (9 votes, average: 4.78 out of 5)
Loading ... Loading ...

Обычно для валидации e-mail можно использовать вот такое выражение или упрощенный вариант:

$filter = "^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$";
if (!eregi($filter, $user_email))
{
	echo "неправильный e-mail адрес";
}

с помощью filter_var () это делается так:

if (!filter_var($user_email, FILTER_VALIDATE_EMAIL))
{
	echo "неправильный e-mail адрес";
}

Таким образом можно быстро определить соответсвует ли принятое нами значение тому, что мы ожидаем.
Некоторые фильтры имеют так же дополнительные опции (флаги):

$user_url = "google.com";
// Мы ожидаем, что URL будет с "http://"
if (!filter_var($user_url, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED))
{
	echo "неправильный URL";
}

Кроме фильтров FILTER_VALIDATE_* есть еще фильтры FILTER_SANITIZE_* — они не только проверяют полученные данные, но еще и изменяют их в соответствии с заданным фильтром:

// $input_var - входные данные
// $sanit_var - входные данные, очищенные от всего кроме чисел и операторов
$input_var = "1+7-3=5 и еще - 5 + 4 и все это равно 4";
$sanit_var =  filter_var($user_int,  FILTER_SANITIZE_NUMBER_INT);
// Результат: 1+7-35-5+44

Фильтры обработки

  • FILTER_SANITIZE_STRING — удалить потенциально опасные данные. С флагами:
    • FILTER_FLAG_NO_ENCODE_QUOTES — не кодировать кавычки
    • FILTER_FLAG_STRIP_LOW — удалить символы с ASCII-кодом меньше 32
    • FILTER_FLAG_STRIP_HIGH — удалить символы с ASCII-кодом больше 127
    • FILTER_FLAG_ENCODE_LOW — кодировать символы с ASCII-кодом меньше 32
    • FILTER_FLAG_ENCODE_HIGH — кодировать символы с ASCII-кодом больше 127
    • FILTER_FLAG_ENCODE_AMP — кодировать символ & в &
  • FILTER_SANITIZE_STRIPPED — псевдоним для FILTER_SANITIZE_STRING
  • FILTER_SANITIZE_ENCODED — удалить или кодировать нежелательные символы (подобно urlencode ()). С флагами:
    • FILTER_FLAG_STRIP_LOW — удалить символы с ASCII-кодом меньше 32
    • FILTER_FLAG_STRIP_HIGH — удалить символы с ASCII-кодом больше 32
    • FILTER_FLAG_ENCODE_LOW — кодировать символы с ASCII-кодом меньше 32
    • FILTER_FLAG_ENCODE_HIGH — кодировать символы с ASCII-кодом больше 32
  • FILTER_SANITIZE_SPECIAL_CHARS — преобразовать специальные символы в HTML-сущности. С флагами:
    • FILTER_FLAG_STRIP_LOW — удалить символы с ASCII-кодом меньше 32
    • FILTER_FLAG_STRIP_HIGH — удалить символы с ASCII-кодом больше 32
    • FILTER_FLAG_ENCODE_HIGH — кодировать символы с ASCII-кодом больше 32
  • FILTER_SANITIZE_EMAIL — удалить все символы, запрещенные в e-mail адресе
  • FILTER_SANITIZE_URL — удалить все символы, запрещенные в URL адресе
  • FILTER_SANITIZE_NUMBER_INT — удалить все символы, кроме целых чисел
  • FILTER_SANITIZE_NUMBER_FLOAT — удалить все символы, кроме чисел с плавающей точкой
  • FILTER_SANITIZE_MAGIC_QUOTES — выполнить addslashes ()

Фильтры проверки

  • FILTER_VALIDATE_INT — проверяет значение как целое. С флагами:
    • min_range — задает минимальное целое число
    • max_range — задает максимальное целое число
    • FILTER_FLAG_ALLOW_OCTAL — разрешает восьмеричные числа
    • FILTER_FLAG_ALLOW_HEX — разрешает шестнадцатеричные числа
  • FILTER_VALIDATE_BOOLEAN — Возвращает TRUE для значений «1», «true», «on» и «yes», иначе — FALSE
  • FILTER_VALIDATE_FLOAT — проверяет значение как число с плавающей точкой
  • FILTER_VALIDATE_REGEXP — проверяет значение на соответствие PERL-совместимому регулярному выражению
  • FILTER_VALIDATE_URL — проверяет значение, как URL. С флагами:
    • FILTER_FLAG_SCHEME_REQUIRED — соответствие RFC (http://example)
    • FILTER_FLAG_HOST_REQUIRED — наличие имени хоста (http://www.example.com)
    • FILTER_FLAG_PATH_REQUIRED — наличие пути после имени хоста (www.example.com/example1/test2/)
    • FILTER_FLAG_QUERY_REQUIRED — наличие строки запроса в URL (example.php?name=Peter&age=37)
  • FILTER_VALIDATE_EMAIL — проверяет значение, как e-mail адрес
  • FILTER_VALIDATE_IP — проверяет значение как IPv4 или IPv6 адрес. С флагами:
    • FILTER_FLAG_IPV4 — значение должно быть правильным IPv4 адресом (255.255.255.255)
    • FILTER_FLAG_IPV6 — значение должно быть правильным IPv6 адресом ( 2001:0db8:85a3:08d3:1319:8a2e:0370:7334)
    • FILTER_FLAG_NO_PRIV_RANGE — значение должно соответствовать RFC, и не входить в частные диапазоны (192.168.0.1, 10.0.0.1, …)
    • FILTER_FLAG_NO_RES_RANGE — значение не должно содержать зарезервированные IP адреса, этот флаг принимает и IPv4 и IPv6 (255.255.255.255)

filter_var () была добавлена в PHP 5.2.0.

Метки:

Среда, 11 февраля 2009 PHP
You can follow any responses to this entry through the RSS 2.0 feed.

Ответить


Февраль 2009
Пн Вт Ср Чт Пт Сб Вс
« Янв   Мар »
 1
2345678
9101112131415
16171819202122
232425262728