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

Limitare l’input ai caratteri alfanumerici in qualsiasi lingua

Questa espressione regolare limita l’input a lettere e numeri di qualsiasi lingua o script:

^+$

Opzioni Regex: Nessuna

Sapori Regex: .NET, Java, XRegExp, PCRE, Perl, Ruby 1.9

Questa usa una classe di caratteri che include stenografie per tutti i punti di codice nelle categorie Unicode Letter, Mark, e Decimal Number, che segue la definizione ufficiale Unicode di un carattere alfanumerico. La categoria Mark è inclusa poiché i marchi sono richiesti per le parole di molte lingue. I marchi sono punti di codice che sono destinati ad essere combinati con altri caratteri (per esempio, per formare una versione accentata di una lettera base).

Purtroppo, le categorie Unicode non sono supportate da tutte le espressioni regolari coperte da questo libro. In particolare, questa regex non funzionerà con JavaScript (a meno che non si usi XRegExp), Python, o con la versione nativa di Ruby 1.8. L’uso di questa regex con PCRE richiede che PCRE sia compilato con il supporto UTF-8, e le categorie Unicode possono essere usate con le funzioni preg di PHP (che si basano su PCRE) se l’opzione /u viene aggiunta alla regex.

La seguente regex mostra un workaround per Python:

^+$

Opzioni regex: Unicode

Sapori Regex: Python

Qui si aggira la mancanza di categorie Unicode in Python usando il flag UNICODE o U quando si crea l’espressione regolare. Questo cambia il significato di alcuni token regex facendoli usare la tabella dei caratteri Unicode. ‘\w‘ ci porta quindi alla maggior parte della strada verso una soluzione, poiché corrisponde ai caratteri alfanumerici e all’underscore. Usando il suo inverso ‘\W‘ in una classe di caratteri negati, possiamo rimuovere il trattino basso da questo insieme. Doppie negazioni come questa sono occasionalmente abbastanza utili nelle espressioni regolari, sebbene possano essere difficili da capire. Python 3.x include caratteri non-ASCII in stenografie come ‘\w‘ per impostazione predefinita, e quindi non richiede il flag UNICODE.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.