Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyrażenie regularne - myślnik, Gdzie jest błąd? może inny pomysł
dobryvinyl.com
post
Post #1





Grupa: Zarejestrowani
Postów: 126
Pomógł: 0
Dołączył: 1.11.2004

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


Witam,

Pisze wyrażenie regularne które mi waliduje prosty text z imputów. Chodzi o to żeby był bezpieczny i niezawierał tagów html. Jezeli tak sie stanie jednak ma zwrócić błąd. Wymysliłem sobie coś takiego

  1. <?php
  2. if (ereg("^[A-Za-z0-9!#$%&'*+/=?^_-`{|}~šćęłńóśżťĽĆĘŁŃÓśŻŽąŚźĄŚŹ ]+$", "$str")){
  3.        return true;
  4.    }else{
  5.      return false;
  6.  }
  7. ?>


Wszystko jest spoko gdyby.. no i tu właśnie mam problem z nieszczęsnym myślnikiem "-" mimo, że jest on dozwolony jego wstawienie w formularzu wyrzuca mi błąd (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Gdzie popełniam błąd? Przeczytałem już trochę materiałów z sieci i nic.

Czy ktoś może ma jakiś inny sposób, wzorzec na rozwiązanie tego problemu?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
JoShiMa
post
Post #2





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Tak patrząc po Twoim kodzie to jest tam sporo znaków, które trzeba poprzedzić znakiem '\'. Są to metaznaki | ( ) { [ ^ $ * + ?

Ten post edytował JoShiMa 16.05.2009, 10:54:50
Go to the top of the page
+Quote Post
kacka
post
Post #3





Grupa: Zarejestrowani
Postów: 44
Pomógł: 5
Dołączył: 29.06.2005

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


Nie sprawdzałem co to robi, tylko poprawiłem:
  1. <?php
  2. if (preg_match('/^[A-Za-z0-9!#$%&'*+/=?^_-`{|}~šćęłńóśżťĽĆĘŁŃÓśŻŽąŚźĄŚŹ ]+$/i', $subject))
  3. ?>
Go to the top of the page
+Quote Post
pyro
post
Post #4





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Po co się męczyć z wyrażeniami regularnymi:

  1. <?php
  2. // prostsze, skuteczniejsze i krótsze rozwiązanie
  3. // zakładając że filtrujemy zmienną `$str`
  4.  
  5. $sec_check = strip_tags($str);
  6.  
  7. if(strlen($sec_check) != strlen($str))
  8. {
  9. die('Po co tagi w twoim stringu :)?');
  10. }
  11. ?>


Cytat(JoShiMa @ 16.05.2009, 11:54:04 ) *
Tak patrząc po Twoim kodzie to jest tam sporo znaków, które trzeba poprzedzić znakiem '\'. Są to metaznaki | ( ) { [ ^ $ * + ?


@JoShiMa, jeżeli podajemy znaki jako zbiór znaków w "[]", to nie trzeba ich escape'ować. A minus się wysypuje, gdyż jest on od określania przedziału znakowego, np. 0-9, więc wystarczy "-" zamienić na "\-"
Go to the top of the page
+Quote Post
JoShiMa
post
Post #5





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Masz rację, nie popatrzyłam gdzie te []
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.09.2025 - 08:48