me gustaría utilizar esta:
/^[a-z_\-\d]+$/i
cuanto a por qué no estoy usando \w
, la siguiente qu ota, tomada de PHP PCRE Pattern Reference, debe explicar por qué no se debe utilizar en esta situación \w
:
Una "palabra" carácter es cualquier letra o dígito o el carácter de subrayado, es decir, cualquier carácter que puede ser parte de una "palabra" de Perl. La definición de letras y dígitos está controlada por las tablas de caracteres de PCRE, y puede variar si se lleva a cabo una coincidencia específica de la configuración regional. Por ejemplo, en la configuración regional "fr" (francés), algunos códigos de caracteres superiores a 128 se utilizan para letras acentuadas, y éstas se corresponden con \w
.
Ese comportamiento no es deseable en este caso, por lo menos que quiere es preocuparse por la configuración regional, utilizar clases de caracteres rectos en lugar de la \w
taquigrafía.
Si desea especificar una longitud mínima (por ejemplo 3):
/^[a-z_\-\d]{3,}$/i
Si desea especificar tanto una longitud mínima y máxima (por ejemplo, 2 y 5):
/^[a-z_\-\d]{2,5}$/i
Verifique la longitud con strlen. Regex es una herramienta, no un martillo. :) – OIS