Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenie regularne
Forum PHP.pl > Forum > PHP
Aztech
Potrzebuję sprawdzić czy użytkownik wprowadził prawidłowe imię i nazwisko tzn
1) musi być CO NAJMNIEJ 2 członowe
2) pierwsze imie MUSI zaczynac się z dużej litery, nazwisko niekoniecznie
3) w nazwisku dozwolone są myślniki, np. Boy-Żeleński
4) nazwiska mogą być 2 członowe, imion może być więcej

dla przykładu, coś takiego jest poprawne:
Anna Magdalena mcPherson-Stefańska

Stworzyłem takie wyrażenie regularne i wydaje mi się, że powinno być ok. Ale czy jest?
  1. <?php
  2. ereg("^[A-z](a-zA-Z/-)* ( A-Za-z/-)*")
  3. ?>

Jeśli coś pokićkałem to mnie poprawcie.
Kshyhoo
Znam babsztyla z nazwiskiem Kowacka Bo-Jin (zmiksowała się z jakimś żółtym), więc będzie miała kłopot z Twoim formularzem smile.gif
Aztech
Właśnie takie miksy też mają chodzić, czyżbym trzeba było to poprawić na takie coś usupełniając o spację
  1. <?php
  2. ereg("^[A-z](a-zA-Z/-)* (( A-Za-z/-)* )*")
  3. ?>

?
Radarek
Jesli piszesz regexa, wpierw postaraj sie wydzielic w nim pewne elementy.

Widze u ciebie imie i nazwisko. Napiszmy wiec wedle twoich kryteriow regexa sprawdzajace imie.

/[A-Z][a-zA-Z]*/

Tu chyba nie ma co tlumaczyc? 1 litera duza, kolejne male lub duzo w dowolnej ilosci (takze 0).

Teraz nazwisko.

/[a-zA-Z]+(\\*s-\\s*[a-zA-Z]+)?/

Pierwszy czlon to ciag malych lub duzych liter i opcjonalny czlon z 2 nazwiskiem po pauzie (\\s* zjadaja dowolna ilosc bialych znakow po obu stronach - oraz pomiedzy imieniem a nazwiskiem).

W sumie wychodzi regex:
  1. <?php
  2.  
  3. if (preg_match("/[A-Z][a-zA-Z]*s*[a-zA-Z]+(*s-s*[a-zA-Z]+)?/", $tekst)) {
  4.  echo "jest ok";
  5. }
  6.  
  7. ?>


Aaa wlasnie doczytalem ze imion moze byc wiecej.

  1. <?php
  2.  
  3. if (preg_match("/([A-Z][a-zA-Z]*s*)+[a-zA-Z]+(*s-s*[a-zA-Z]+)?/", $tekst)) {
  4.  echo "jest ok";
  5. }
  6.  
  7. ?>


EDIT:
do kazdego z tych wyrazen trzeba dodac na poczatku ^ a na koncu $, bo sprawdzamy czy caly tekst pasuje do wyrazenia a nie jego czesc.
marcman
Mała podpowiedź: w nazwisku mogą się znaleźć znaki '

"O'Reilly" to podręcznikowy przykład.
Radarek
Cytat(marcman @ 2005-12-09 10:48:48)
Mała podpowiedź: w nazwisku mogą się znaleźć znaki '

"O'Reilly" to podręcznikowy przykład.

No ok. Ja napisalem takie wyrazenie jakie chcial autor. Jesli uzna ze nazwisko to zbior takich a nie innych znakow to sobie zmieni odpowiednio wyrazenie.
Aztech
Co dziwne... działa smile.gif)) a tak w ogóle to wielkie dzięki. Szacun
Spirit86
Przydała by się też możliwość używania polskich znaków, tj. ó, ą, ź itd.
Aztech
To nie problem, wystarczy je dopisać zaraz za wyrażeniami [a-z][A-Z] a tutaj tylko by zaciemniały ideę smile.gif
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.