Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] preg_match i akceptacja liter/cyfr/spacji etc.
Forum PHP.pl > Forum > Przedszkole
messmaker
Witam,

potrzebuję funkcji do filtrowania wprowadzanych przez użytkownika danych. Do tej pory mam:

Przepuszcza tylko litery:
  1. <?php
  2. if (preg_match("/[^A-z_-]/", $username)==1) { $errors++;  $errorlist .= "<br>W loginie znajdują się niedozwolone znaki.";  }
  3. ?>

Przepuszcza tylko litery i cyfry:
  1. <?php
  2. if (preg_match("/[^A-z0-9_-]/", $username)==1) { $errors++;  $errorlist .= "<br>W loginie znajdują się niedozwolone znaki.";  }
  3. ?>

Potrzebuję jeszcze wersji dla przepuszczania liter, cyfr i spacji i osobnej dla przepuszczania liter, cyfr, spacji i znaków nowej linii (najlepiej tak, żeby nie akceptowały tabulacji). Mile widziane gotowe rozwiązania, ale wskasówkami też nie pogardzę wstydnis.gif
kefirek
  1. <?php
  2. $username = 'tra tra';
  3. if (!preg_match("/^[-0-9A-Z_@s]+$/i", $username)) {
  4. echo 'W loginie znajdują się niedozwolone znaki';
  5. }
  6. ?>
messmaker
Sprawdziłem, nie przepuszcza spacji - przepuszcza bez niej.
Wicepsik
To dodaj spacje w preg_match

  1. <?php
  2. $username = 'tra tra';
  3. if (!preg_match("/^[-0-9A-Z_ @s]+$/i", $username)) {
  4. echo 'W loginie znajdują się niedozwolone znaki';
  5. }
  6. ?>
messmaker
bingo, jeszcze tylko poproszę o dodanie akceptacji znaków nowej linii, próbowałem dodać /n@s ale więcej to namieszało niż pomogło mellow.gif
Wicepsik
\n
messmaker
ani
  1. <?php
  2. $username = 'tra tra
  3. ';
  4. if (!preg_match("/^[-0-9A-Z_ @s\n]+$/i", $username)) {
  5. echo 'W loginie znajdują się niedozwolone znaki';
  6. }
  7. ?>

ani
  1. <?php
  2. $username = 'tra tra
  3. ';
  4. if (!preg_match("/^[-0-9A-Z_ @s\n@s]+$/i", $username)) {
  5. echo 'W loginie znajdują się niedozwolone znaki';
  6. }
  7. ?>

Nie działają tak jak powinny. Próbowałem też z _ przed \n, ale również nie przepuszcza blinksmiley.gif
Wicepsik
  1. <?php
  2. if (!preg_match("/^[-0-9A-Z_ @sr\n]+$/i", $username)) {
  3. echo 'W loginie znajdują się niedozwolone znaki';
  4. }
  5. ?>


Na linuxach chyba jest \r\n a na windowsach \n lub odwrotnie ;P
messmaker
ohmy.gif pierwsze widzę, żeby interpretacja PHP zależała od systemu. Tak czy inaczej działa - wielkie dzięki! smile.gif

ostateczna wersja to:
  1. <?php
  2. $username = 'tra tra
  3. ';
  4. if (!preg_match("/^[-0-9A-Z_ @sr\n]+$/i", $username) && !preg_match("/^[-0-9A-Z_ @s\n]+$/i", $username)) {
  5. echo 'W loginie znajdują się niedozwolone znaki';
  6.  
  7. ?>



EDIT: windows ma \r\n bankowo winksmiley.jpg
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.