Używasz PHP 5.2 ? Zapomnij o regexp…

php-logoWiem, wiem, premiera PHP 5.2.0 dawno za nami. Ale warto wspomnieć, że pojawił się nowy zbiór funkcji w tej wersji – Filter. W zamyśle autorów mają one nam pomóc z różnego rodzaju walidacją oraz filtrami.
W zbiorze mamy m.in. funkcję filter_var( mixed $variable [, int $filter=FILTER_DEFAULT [, mixed $options ]]).
Dzięki niej tworzenie nowych filtrów w aplikacjach PHP stało się jeszcze prostsze. Chcemy sprawdzić, czy podany przez użytkownika adres e-mail jest poprawny? Nic prostszego:

Dostępne walidujące filtry:

  • FILTER_VALIDATE_INT
    opcjonalne flagi: min_range, max_range, FILTER_FLAG_ALLOW_OCTAL, FILTER_FLAG_ALLOW_HEX
  • FILTER_VALIDATE_BOOLEAN
  • FILTER_VALIDATE_FLOAT
  • FILTER_VALIDATE_REGEXP
  • FILTER_VALIDATE_URL
    opcjonalne flagi: FILTER_FLAG_SCHEME_REQUIRED (http://), FILTER_FLAG_HOST_REQUIRED (www.example.com), FILTER_FLAG_PATH_REQUIRE, FILTER_FLAG_QUERY_REQUIRED
  • FILTER_VALIDATE_EMAIL
  • FILTER_VALIDATE_IP
    opcjonalne flagi: FILTER_FLAG_IPV4, FILTER_FLAG_IPV6, FILTER_FLAG_NO_PRIV_RANGE (sprawdza czy nie zaweiera IP tj. 192.168.0.1, 10.0.0.1, …), FILTER_FLAG_NO_RES_RANGE

Mamy również dostęp do filtrów czysto filtrujących:

  • FILTER_SANITIZE_STRING
    (używane chociazby do usuwania tagów), opcjonalne flagi: FILTER_FLAG_NO_ENCODE_QUOTES, FILTER_FLAG_STRIP_LOW (wycina znaki ASCII poniżej 32), FILTER_FLAG_STRIP_HIGH (wycina znaki ASCII powyżej 127), FILTER_FLAG_ENCODE_LOW (koduje znaki ASCII poniżej 32), FILTER_FLAG_ENCODE_HIGH (koduje znaki ASCII powyżej 127), FILTER_FLAG_ENCODE_AMP (zamienia & na &)
  • FILTER_SANITIZE_ENCODED
    (podobne zastosowanie do urlencode()), opcjonalne flagi: FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_LOW, FILTER_FLAG_ENCODE_HIGH
  • FILTER_SANITIZE_SPECIAL_CHARS
    opcjonalne flagi: FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_HIGH
  • FILTER_SANITIZE_EMAIL
    (usuwa wszystkie znaki niedozwolone w adresach e-mail)
  • FILTER_SANITIZE_URL
  • FILTER_SANITIZE_NUMBER_INT
  • FILTER_SANITIZE_NUMBER_FLOAT
  • FILTER_SANITIZE_MAGIC_QUOTES

Mimo, że niektóre filtry są już zawarte w aktualnych frameworkach PHP, to na pewno nowa funkcja ułatwi tworzenie nowych.