Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Mały problem z wyrażeniami regularalnymi
mk83
post
Post #1





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 17.02.2005

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


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.

Ten post edytował mk83 24.09.2005, 12:06:10
Go to the top of the page
+Quote Post
s_w_ir
post
Post #2





Grupa: Zarejestrowani
Postów: 315
Pomógł: 1
Dołączył: 6.08.2003
Skąd: Kielce

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


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.

Ten post edytował s_w_ir 24.09.2005, 19:14:37
Go to the top of the page
+Quote Post
Kicok
post
Post #3





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


  1. <?php
  2.  
  3. $string = '1234asdfASDF()[] ';
  4. if(preg_match("/^[0-9a-zA-Z[()] ]*$/", $string))
  5. echo('asdasdas');
  6.  
  7. ?>


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
s_w_ir
post
Post #4





Grupa: Zarejestrowani
Postów: 315
Pomógł: 1
Dołączył: 6.08.2003
Skąd: Kielce

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


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().

Ten post edytował s_w_ir 24.09.2005, 20:25:35
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 Aktualny czas: 19.08.2025 - 05:38