Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Walidowanie stringów z formularzy, Sprawdzanie dozwolonych znaków
pakonet
post 31.05.2005, 13:23:14
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 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


--------------------
Nauka angielskiego - www.english.hb.pl
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
nospor
post 31.05.2005, 13:54:58
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?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pakonet
post 31.05.2005, 14:55:24
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 00:51