Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyrażenie regularne
Forum PHP.pl > Forum > Przedszkole
ag00
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. 
JoShiMa
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.
ag00
  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. 
JoShiMa
A dlaczego tak? ''\'
ag00
  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.
JoShiMa
Nie wiem czy rozumiem, ale pozytywnie weryfikuje znak \ bo jest on w wyrażeniu regularnym...
ag00
  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
JoShiMa
To może zamiast eregi zacznij używać preg_
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.