Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z wyrażeniami regularnymi do walidacji
Forum PHP.pl > Forum > PHP
kemot
Po długiej przerwie wzi±łem się ponownie za pisanie skryptów w php. Ogólnie wyglada to tak że jest formularz w którym edytuje lub wprowadza się dane i chciałem zrobić do tego walidacje. I tu mam problem. Próbowałem na różne sposoby:

Kod
if (!ereg('^[a-zA-Z]{3,30} , $imie_valid_c)) {
print '<span class="blad">- Podane <b>imię</b> zawiera niedozwolone znaki b±dĽ nie mie¶ci się w przedziale od 3 do 30 znaków.</span><br/>'.$imie_valid_c.'';
$blad=true;
}

Ale potrzebowałem też polskich znaków bo podobna walidacje mam dla nazwiska (z reszt± skrypt nie przepuszczałby takich imion jak Łucja czy Błażej). Dlatego zrobiłem tak:
Kod
if (!ereg('^[a-zA-Z±ćęłń󶿼ƣŃӦݬ]{3,30} , $imie_valid_c)) {
print '<span class="blad">- Podane <b>imię</b> zawiera niedozwolone znaki b±dĽ nie mie¶ci się w przedziale od 3 do 30 znaków.</span><br/>'.$imie_valid_c.'';
$blad=true;
}

Ale mimo to w skrypcie wy¶wietla bł±d. Spróbowałem więc kasować wszystkie znaki poza tymi w ereg() za pomoc± ereg_replace()
Kod
$imie_valid_c = ereg_replace('[^a-zA-Z±ćęłń󶿼ƣŃӦݬ]', '', $imie_valid_c);

Po wy¶wietleniu zmiennej $imie_valid_c okazało się, że polskie znaki dodane po a-zA-Z również zostały usunięte choć działanie skryptu powinno byc takie że usuwa z ci±gu znaków wszystko poza znakami w []. Wpisanie tam całego alfabetu też nic nie dało. Kto¶ wie może co jest grane? Z góry dzięki za pomoc.
Roly
Może spróbuj użyć wyrażeń regularnych PERL-a oraz funkcji z rodziny preg_.
kemot
Potrzebuje informacji jak to zrobic za pomoc± ereg() lub ereg_replace() ewentualnie innej funkcji o podobnym działaniu.
barthpl
Może taka funkcja sprawdzaj±ca:
  1. <?php
  2. function isName( $name ) {
  3. $val = iconv('UTF-8', 'ASCII//TRANSLIT', $name);
  4. return eregi( '^[a-z]{3,30}$', $val);
  5. }
  6. ?>

A to przykład zastosowania:
  1. <?php
  2. $imie[] = "Łucja";
  3. $imie[] = "Błażej";
  4. $imie[] = "Łucja,";
  5. $imie[] = "Bartek!";
  6. $imie[] = "54353";
  7.  
  8. foreach( $imie as $val ) {
  9. echo "<b>$val</b>";
  10. if( !isName($val) )
  11. echo 'nie ';
  12. echo "jest OK<br/>";
  13. }
  14. ?>

i jego efekt:

Łucja jest OK
Błażej jest OK
Łucja, nie jest OK
Bartek! nie jest OK
54353 nie jest OK

Jeżeli cię interesuj± jeszcze francuskie i niemieckie litery specjalne to trzeba by dodać mał± modyfikację. Jak to zrobić znajdziesz na przykład tutaj.
kemot
OK dzięki, zrobione smile.gif Użyłem tylko tej konwersji na łacińskie znaki.


  1. <?php
  2.  
  3. $val = iconv('UTF-8', 'ASCII//TRANSLIT', $name);
  4.  
  5. ?>


Dzięki barthpl 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.