PHP RegExp személynévre
Helló!
Egy olyan RegExp-t szeretnék megvalósítani, amely igazzal tér vissza ha az alábbiak teljesülnek:
- nincs benne "illegális" karakter (pl.: $,',",+,!,%,/,=,(,),{,} stb.)
- tartalmazhatja a magyar ábécé bármelyik karakterét
Eddig ezzel próbálkoztam, sajnos engedi például a '$' jelet:
/^[-a-zA-Z_éáőúűöüó]/i
Egyébként a felhasználó által megadott személynevet (külön adja meg a vezetéknevet és a keresztnevet) akarom ellenőrizni vele a preg_match() függvény segítségével, szóval ha valaki tud jobb megoldást, várom az ötleteket!
Előre is köszönöm az építő jellegű hozzászólásokat!
■ Egy olyan RegExp-t szeretnék megvalósítani, amely igazzal tér vissza ha az alábbiak teljesülnek:
- nincs benne "illegális" karakter (pl.: $,',",+,!,%,/,=,(,),{,} stb.)
- tartalmazhatja a magyar ábécé bármelyik karakterét
Eddig ezzel próbálkoztam, sajnos engedi például a '$' jelet:
/^[-a-zA-Z_éáőúűöüó]/i
Egyébként a felhasználó által megadott személynevet (külön adja meg a vezetéknevet és a keresztnevet) akarom ellenőrizni vele a preg_match() függvény segítségével, szóval ha valaki tud jobb megoldást, várom az ötleteket!
Előre is köszönöm az építő jellegű hozzászólásokat!
Vagy azt add meg, mit tartalmazhat, vagy azt, hogy mit nem
\p{L}
vagy máshogy írva\pL
tartalmazza az összes betű és betű módosító karaktert. Ezen kívül ugye a szöveg tartalmahat kötő és alulvonás jeleket és ebből kell felépülnie a szövegnek az elejétől a végéig. A Unicode karakterek mintaillesztéséről is van dokumentáció. És amennyiben nem adsz meg u kapcsolót, ne adj meg nem ASCII karaktereket egy reguláris kifejezésben, mert annak fura eredményei lehetnek.Ez bizony fail
Szóköz
Ékezet
Itt a forrás, és itt megtekintheted akcióban.
Sajnos nem engedi az
Egyébként a szerver ISO-8859-2 kódolásról tesz szót a HTTP fejlécben, úgyhogy én vagy csattogtatnám a header() függvényt, vagy kivenném a reguláris kifejezéstől az u flaget. Legalábbis nálam parancssorból ez a különbség zavarja meg.
U flag eltávolítva
Minimális hosszúság
Így legalább 3 karakternek kell lennie :) Ezzel megúszod az strlen()-t, persze lehet még cifrázni: korlátlan számú csoport, amiben két korlátlan (de minimum 1) elemű betűcsoport közt van max. 2 nembetű karakter (ugye a "Dr. Xyz" miatt nem elég az 1). Ja, és a fentiben a pont is benne van, ugye akik rövidítik valamelyik nevüket.
Így legalább 3 karakternek
/^\p{L}+(?:[_. -]\p{L}+)*$/
Mármint escape-elve így
/^\p{L}+(?:[_\. \-]\p{L}+)*$/
Mármint escape-elve
Hm
A dokumentáció Character
Az alulvonáson utólag én is elgondolkoztam…
Jó tudni
?:
is kivehető ilyen szempontból, mert egy backreference nem sok vizet zavar :)Egyébként én rendszerint a
%
jelet használom delimiternek, mert úgy kevésbé rondák a webcímes regexek :)Tulajdonképpen a ?: is
Valami nem jó
Írjátok be, hogy "árví" (természetesen idézőjelek nélkül), ezt elfogadja. Viszont az "árvíz" stringet már nem.
u
mb_internal_encoding('UTF-8');
Ez sosem árt.
Ékezet
UTF-8