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
.