Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Wyrażenie regularne, Błędne opisanie wystąpienia apostrofu
ag00
post 6.11.2008, 12:05:36
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 6.11.2008

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


Na początek jako nowy użytkownik,chciałam się przywitać. smile.gif

W funkcji sprawdzającej dane z formularza mam takie wyrażenie:

  1. <?php
  2. function sprawdz($form) {
  3.    if (eregi( '^[a-ząćęłńóśżźĄĆĘŁŃÓŚŻŹ'-]+     , $form) ) {
  4.      return true;
  5.    } else {
  6.      return false;
  7.    }
  8.  }
  9. ?>


Dla liter i znaku - wszystko jest ok, jednak dla apostrofów się wysypuje. Nijak nie mogę się doszukać, jak prawidłowo zapisać apostrof w wyrażeniu. Wyrażenie w cudzysłów, błądu nie sypie jednak funkcja traktuje apostrof jako błąd. 
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
JoShiMa
post 6.11.2008, 12:20:27
Post #2





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

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


Po pierwsze apostrof w tym miejscu pewnie Ci zamyka (skraca) wyrażenie regularne. Spróbuj go poprzedzić znakiem '\' albo zapisać go szesnastkowo \x{kod} jeśli znasz kod, ale nie gwarantuje, że zadziała, bo nigdy nie próbowałam. Aha. Możesz jeszcze całość wyrażenia zapisać w cudzysłowiu " i wtedy apostrof powinien łyknąć bez bólu.

Poza tym brakuje Ci A-Z.

Ten post edytował JoShiMa 6.11.2008, 12:27:11


--------------------
Go to the top of the page
+Quote Post
ag00
post 6.11.2008, 12:40:55
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 6.11.2008

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


  1. <?php
  2. (eregi( "^[a-ząćęłńóśżźĄĆĘŁŃÓŚŻŹ''']+$", $form)
  3. ?>


Dziękuję smile.gif zadziałała powyższa kombinacja. Eregi ignoruje duże i małe. 
Go to the top of the page
+Quote Post
JoShiMa
post 6.11.2008, 12:43:41
Post #4





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

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


A dlaczego tak? ''\'

Ten post edytował JoShiMa 6.11.2008, 12:44:22


--------------------
Go to the top of the page
+Quote Post
ag00
post 6.11.2008, 13:28:49
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 6.11.2008

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


  1. <?php
  2. (eregi( "^[a-ząćęłńóśżźĄĆĘŁŃÓŚŻŹ ']+$", $form)
  3. ?>


Dlaczego? Dlatego, że zostały mi się pozostałości prób i błedów. Moja pomyłka, powieliłam znaki. Obecnie wyrażenie radzi już sobie z dozwolonym apostrofem i spacjami w tekście jednak nie umiem sobie logicznie wytłumaczyć dlaczego mimo sprawdzania apostrofu uznaje \ za prawidłowy, nie traktując go jako znak bezpieczny i pozwala na jego wprowadzenie.
Go to the top of the page
+Quote Post
JoShiMa
post 6.11.2008, 13:56:46
Post #6





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

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


Nie wiem czy rozumiem, ale pozytywnie weryfikuje znak \ bo jest on w wyrażeniu regularnym...


--------------------
Go to the top of the page
+Quote Post
ag00
post 6.11.2008, 15:02:52
Post #7





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 6.11.2008

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


  1. <?php
  2. eregi( "^[a-ząćęłńóśżźĄĆĘŁŃÓŚŻŹ' ]+$", $form) //traktuje apostrof za błąd, puszcza spacje
  3.  
  4. eregi( "^[a-ząćęłńóśżźĄĆĘŁŃÓŚŻŹ ']+$", $form) //ukośnik uznawany za znak prawidłowy apostrof również 
  5.  
  6.  
  7. eregi( "^[a-ząćęłńóśżźĄĆĘŁŃÓŚŻŹ ']+$", $form) //ukośnik uznawany za znak prawidłowy apostrof również 
  8. ?>



JoShiMa Właśnie tak i ja to rozumiem ale... teoretycznie jako składnik bezpiecznego wyrażenia '\, traktuje je podwójnie jako apostrof i jako ukośnik. Problem w tym, że funkcja ma puścić oprócz liter tylko apostrofy i spacje + myślnik co udaje się bez problemu. Jednak możliwość wpisania ukośnika w danych testowych jest błędem. 

Zapis znaków jako 10 czy 16 nie pomaga sad.gif
Go to the top of the page
+Quote Post
JoShiMa
post 6.11.2008, 15:22:33
Post #8





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

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


To może zamiast eregi zacznij używać preg_


--------------------
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 Wersja Lo-Fi Aktualny czas: 29.06.2025 - 00:29