Regular Expressions Cookbook, 2nd Edition by Jan Goyvaerts, Steven Levithan

A bevitel korlátozása alfanumerikus karakterekre bármely nyelven

Ez a reguláris kifejezés a bevitelt bármely nyelv vagy script betűire és számaira korlátozza:

Regex ízek: .NET, Java, XRegExp, PCRE, Perl, Ruby 1.9

Ez egy olyan karakterosztályt használ, amely a Unicode Letter, Mark és Decimal Number kategóriák összes kódpontjának rövidítéseit tartalmazza, ami követi az alfanumerikus karakter hivatalos Unicode definícióját. A Mark kategória azért szerepel, mert számos nyelvben a szavakhoz szükségesek a jelek. A jelek olyan kódpontok, amelyek más karakterekkel kombinálhatók (például egy alapbetű ékezetes változatát alkotják).

Az Unicode-kategóriákat sajnos nem támogatja az ebben a könyvben tárgyalt összes reguláris kifejezés ízesítés. Konkrétan, ez a regex nem fog működni a JavaScript (kivéve, ha az XRegExp-t használja), a Python vagy a Ruby 1.8 natív ízével. Ennek a regexnek a PCRE-vel való használata megköveteli, hogy a PCRE UTF-8 támogatással legyen lefordítva, és az Unicode kategóriák használhatók a PHP preg függvényeivel (amelyek a PCRE-re támaszkodnak), ha a /u opciót a regexhez csatoljuk.

A következő regex egy Pythonra vonatkozó megoldást mutat:

^+$

Regex opciók: Unicode

Regex flavors: Itt a szabályos kifejezés létrehozásakor a UNICODE vagy U flag használatával megkerüljük a Pythonban a Unicode kategóriák hiányát. Ez megváltoztatja néhány regex token jelentését azáltal, hogy a Unicode karaktertáblázatot használja. A ‘\w‘ ezután a legtöbbet hozza a megoldáshoz, mivel megfelel az alfanumerikus karaktereknek és az aláhúzásnak. Az inverz ‘\W‘ használatával egy negált karakterosztályban eltávolíthatjuk az aláhúzást ebből a halmazból. Az ehhez hasonló kettős negatíva esetenként igen hasznos a reguláris kifejezésekben, bár néha nehéz lehet a fejünkbe verni. A Python 3.x alapértelmezés szerint tartalmazza a nem-ASCII karaktereket az olyan rövidítésekben, mint a ‘\w‘, és ezért nincs szükség a UNICODE jelzőre.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.