Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Mały problem z wyrażeniami regularalnymi
Forum PHP.pl > Forum > Przedszkole
mk83
Mam nastepujace wyrazenie:
  1. <?php
  2.  
  3. if(ereg("^[a-zA-Z0-9]*$",$_POST['tekst'])) return 1; else return 0;
  4.  
  5. ?>

Na powyzszym przykladzie wszystko dziala mi poprawnie, czyli akceptowane sa tylko znaki alfanumeryczne.
Teraz chcialem aby przechodzily rowniez znaki specjalnie takie jak () czy []. I tu pojawia sie pewnien problem, bo jesli zrobie tak:
  1. <?php
  2.  
  3. if(ereg("^[a-zA-Z0-9[(]*$",$_POST['tekst'])) return 1; else return 0;
  4.  
  5. ?>

to jest wszystko ok, ale jesli zrobie tak:
  1. <?php
  2.  
  3. if(ereg("^[a-zA-Z0-9[(])]*$",$_POST['tekst'])) return 1; else return 0;
  4.  
  5. ?>

to juz niestety nie.
I jeszcze jedno: jak dodac do tego znak spacji questionmark.gif

Wiem ze pytania maze banalne, ale przejzalem pare kursow na google i jakos nie moge znalesc odpowiedzi.
s_w_ir
Tu masz kod na spacje, czyli po prostu dodajsze spacje po przedziale:
  1. <?php
  2.  
  3. $a = "df45  hh";
  4.  
  5. if(ereg("^[a-zA-Z0-9 ]*$",$a)) echo "good";
  6.  
  7. ?>


****edit
Z tego co zauważyłem znak ']' wszytsko psuje bo:
  1. <?php
  2. $a = "(hgjhjytj4545)[ ";
  3.  
  4. if(ereg("^[()[a-zA-Z0-9 ]*$",$a)) echo "good";
  5. ?>
tak to dziala a jak sie doda obsługe ']' to sie psuje, jeszcze pokombinuje.
Kicok
  1. <?php
  2.  
  3. $string = '1234asdfASDF()[] ';
  4. if(preg_match("/^[0-9a-zA-Z[()] ]*$/", $string))
  5. echo('asdasdas');
  6.  
  7. ?>
s_w_ir
W manualu php:
Cytat
It is not possible to have the literal character "]" as the end character of a range. A pattern such as [W-]46] is interpreted as a class of two characters ("W" and "-") followed by a literal string "46]", so it would match "W46]" or "-46]". However, if the "]" is escaped with a backslash it is interpreted as the end of range, so [W-\]46] is interpreted as a single class containing a range followed by two separate characters. The octal or hexadecimal representation of "]" can also be used to end a range.

Dziwne. Nie spodziewałem sie ']' może narobić takiego zamieszania. dobrze wiedzieć

Edit*****
Mam pytanie bo nie doszukałem sie w manualu: Co oznaczają te '/' przed i po wyrażenu regularnym. Jaką one pełnią funkcje, czy ma to właśnie związek z obsługa tego szczególnego przypadku jak ']'?

edit2*****
Widze już że funkcja ereg() nie radzi sobie nawet przy takim zapisie, za to te '/' to wymogi funkcji preg_match. Mówiąc inaczej i odpowieadając na swoj pytanie te '/' są składnia funkcji preg_match() która jest zdecydownie lepsza od ereg().
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.