Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Walidowanie stringów z formularzy
Forum PHP.pl > Forum > PHP
pakonet
Napisałem prostą funkcję sprawdzającą zadany tekst pod kątem dozwolonych znaków. Chcę dzięki niej walidować dane pochodzące z formularza - tak aby np. napisy nie zawierały apostrofów czy innych znaków mogących spowodować problemy przy dodawaniu do bazy. Może komuś się przyda ten kawałek kodu smile.gif. Dajcie znać jeśli znajdziecie jakieś błędy.

  1. <?php
  2. /*
  3.   Sprawdza, czy podany tekst składa się wyłącznie z dozwolonych znaków. Domyś
  4. nie 
  5.   dozwolone są tylko litery. Dodatkowo można włączyć akceptowanie cyfr ($allow_numbers), 
  6.   oraz podać akceptowane znaki specjalne (np. $allowed_special_chars=' _-' spowoduje, 
  7.   że akceptowane będą spacje, znaki podkreślenia i myślniki).
  8.  
  9.   Uwaga: białe znaki na początku i na końcu tekstu są ignorowane, nawet gdyby miał
    y
  10.   spowodować przekroczenie maksymalnej długości. Należy samodzielnie zadbać o
  11. ich 
  12.   usunięcie.
  13. */ 
  14. function is_valid_string($text, $min_length=1, $max_length=250, $allow_numbers=false, $allowed_special_chars='') {
  15. if($min_length<0) $min_length=0;
  16. // ignorujemy białe znaki na końcu i początku tekstu
  17. $text = trim($text);
  18. // sprawdzamy długosć tekstu
  19. if(strlen($text)<$min_length || strlen($text)>$max_length) return false;
  20. // akceptacja pustego tekstu, jeżeli dozwolona jest zerowa długość
  21. if($min_length==&& $text=='') return true; 
  22. // obsługa cyfr
  23. $numbers = $allow_numbers?'0-9':'';
  24. // dodanie znaków  przed każdym znakiem specjalnym
  25. $allowed_special_chars = preg_replace('/([^ ])/i', '$0', $allowed_special_chars);
  26. // sprawdzenie wyrażenia regularnego
  27. return preg_match('/^[a-ząćęłńóśźż'.$numbers.$allowed_special_chars.']{'.$min_length.','.$max_length.'}$/i', $text);
  28. }
  29. ?>
nospor
bledem jest walidowanie pola formularza pod kątem czy zawiera apostrofy. A jeśli ktoś chce aby apostrofy własnie byly? Taką sytuację przy wpisywaniu do bazy rozwiązuje się escapowaniem, a nie wykluczeniem apostrofów.

Ponadto robisz trima. A co jeśli ktoś tak naprawdę chcial mieć biale znaki na koncu lub na początku?
pakonet
Cytat
bledem jest walidowanie pola formularza pod kątem czy zawiera apostrofy. A jeśli ktoś chce aby apostrofy własnie byly? Taką sytuację przy wpisywaniu do bazy rozwiązuje się escapowaniem, a nie wykluczeniem apostrofów.


No to był tylko taki przykład z tymi apostrofami. Oczywiście można je umieścić na liście dozwolonych znaków, a stringa przetwarzać później np. mysql_escape_string.

Cytat
Ponadto robisz trima. A co jeśli ktoś tak naprawdę chcial mieć biale znaki na koncu lub na początku?


Raczej się nie spotkałem z sytuacją, żeby zostawianie białych znaków na początku/końcu stringa miało jakiś sens. Zwykle je usuwam, zawsze to parę bajtów w bazie zaoszczędzone.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.