067 607 57 84
МЕНЮ

PHP - валідація даних без регулярних виразів

Створення сайтів Львів

Будь-який розробник стикається зі створенням форм, а разом з цим приходить і необхідність перевіряти введені користувачем дані. Можна використовувати регулярні вирази, а можна обійтися і без них в деяких випадках тому регулярні вирази в складних варіаціях вимогливі до ресурсів.

Для перевірки валідності, наприклад, email можна використовувати регулярний вираз:

^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$
                    

Перевірка даних тепер зводиться до застосування функції filter_var. Як зрозуміло з назви функції перевіряти ми можемо не тільки на відповідність рядка email'у, а й багато чого ще: url, типи даних, IP-адреса і т.д. Дані про всі фільтрах надасть функція print_r(filter_list());:

Array
(
    [0] => int
    [1] => boolean
    [2] => float
    [3] => validate_regexp
    [4] => validate_url
    [5] => validate_email
    [6] => validate_ip
    [7] => string
    [8] => stripped
    [9] => encoded
    [10] => special_chars
    [11] => unsafe_raw
    [12] => email
    [13] => url
    [14] => number_int
    [15] => number_float
    [16] => magic_quotes
    [17] => callback
)
                    

Приклад:

var_dump(filter_var('info@yandex.ru', FILTER_VALIDATE_EMAIL));
var_dump(filter_var('info@yandex', FILTER_VALIDATE_EMAIL));
var_dump(filter_var('www.artkiev.com', FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED));
var_dump(filter_var('http://site.com', FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED));
                    

Дані, які поверне скрипт будуть наступними:

string(17) "info@yandex.ru"
bool(false)
bool(false)
string(18) "http://site.com"
                    

Як Ви вже встигли помітити - функція повертає false якщо дані криві або значення після перевірки.

Насправді можна перевіряти числа на певний проміжок значень, вказувати які дані повертати в разі невдалої перевірки. Останнє може стати в нагоді для перевірки форм, які заповнювати необов'язково.