Dlaczego wyrażenie regularne nie akceptuje polskich znaków ?

Dlaczego wyrażenie regularne nie akceptuje polskich znaków ?
V2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 86
0

Przeprowadzam walidację i nie wiem dlaczego, dla pierwszej litery walidacji nie przechodzą polskie znaki, a powinny. Takiego problemu nie ma dalszych pozycjach. Gdzie tu może być błąd to nie mam pojęcia.

Kopiuj
 else if(!preg_match('/^[A-Z-ĄĘŁŃÓŚŹŻ][a-z-ąćęłńóśźż]{2,12}$/', $val))
Sensacyjny Sebastian
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 412
5

Regexy domyślnie działają w trybie ASCII. Potrzebujesz włączyć tryb Unicode, poprzez użycie flagi u.
https://www.php.net/manual/en/reference.pcre.pattern.modifiers.php

Poza tym, w pierwszej grupie pominąłeś Ć.

katakrowa
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Chorzów
  • Postów: 1670
2

Czy używasz tego w UTF8 ?
Musisz mieć plik PHP w UTF-8.

Kopiuj
  $val = "KasiakównaĄAAAAAAAAA";
  if ( preg_match('/^[A-Z-ĄĘŁŃÓŚŹŻ][a-z-ąćęłńóśźż]{2,12}$/', $val) == true ) {
    echo "TRUE" ;
  } else {
    echo "FALSE" ; 
  }

ZWRACA FALSE ;

Kopiuj
  $val = "Kąsiakówna";
  if ( preg_match('/^[A-Z-ĄĘŁŃÓŚŹŻ][a-z-ąćęłńóśźż]{2,12}$/', $val) == true ) {
    echo "TRUE" ;
  } else {
    echo "FALSE" ; 
  }

ZWRACA TRUE ;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.