Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Walidowanie stringów z formularzy, Sprawdzanie dozwolonych znaków
pakonet
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 27.05.2005

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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. ?>


Ten post edytował pakonet 31.05.2005, 13:23:53
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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?
Go to the top of the page
+Quote Post
pakonet
post
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 27.05.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 21:55