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

Limitar la entrada a caracteres alfanuméricos en cualquier idioma

Esta expresión regular limita la entrada a letras y números de cualquier idioma o script:

^+$

Opciones de la expresión regular: Ninguna

Sabores de Regex: .NET, Java, XRegExp, PCRE, Perl, Ruby 1.9

Esta utiliza una clase de caracteres que incluye abreviaturas para todos los puntos de código en las categorías de letras, marcas y números decimales de Unicode, que sigue la definición oficial de Unicode de un carácter alfanumérico. La categoría Marca se incluye porque las marcas son necesarias para las palabras de muchos idiomas. Las marcas son puntos de código que están destinados a ser combinados con otros caracteres (por ejemplo, para formar una versión acentuada de una letra base).

Desgraciadamente, las categorías Unicode no son soportadas por todos los sabores de expresiones regulares cubiertos por este libro. Específicamente, esta expresión regular no funcionará con JavaScript (a menos que se use XRegExp), Python, o el sabor nativo de Ruby 1.8. El uso de este regex con PCRE requiere que PCRE sea compilado con soporte UTF-8, y las categorías Unicode pueden ser usadas con las funciones preg de PHP (que dependen de PCRE) si la opción /u es añadida al regex.

El siguiente regex muestra una solución para Python:

^+$

Opciones del regex: Unicode

Sabores de regex: Python

Aquí, trabajamos alrededor de la falta de categorías Unicode en Python utilizando la bandera UNICODE o U al crear la expresión regular. Esto cambia el significado de algunos tokens regex haciendo que utilicen la tabla de caracteres Unicode. ‘\w‘ nos lleva entonces a la mayor parte del camino hacia una solución, ya que coincide con los caracteres alfanuméricos y el guión bajo. Utilizando su inverso ‘\W‘ en una clase de caracteres negados, podemos eliminar el guión bajo de este conjunto. Las dobles negaciones como ésta son a veces muy útiles en las expresiones regulares, aunque pueden ser difíciles de entender. Python 3.x incluye por defecto los caracteres no ASCII en las abreviaturas como ‘\w‘, y por lo tanto no requiere la bandera UNICODE.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.