authentication - tener - ¿Cuáles deberían ser los caracteres válidos en los nombres de usuario?
la contraseña debe tener de 6 a 12 caracteres y contener una combinación de caracteres y números. (10)
Cuando no se especifica, uso esto:
^/w(?:/w*(?:[.-]/w+)?)*(?<=^.{4,32})$
Esto requiere una longitud de 4 con un máximo de 32 caracteres. Debe comenzar con un carácter de palabra y puede tener puntos y rayas no continuos. La única razón por la que uso esto es porque es lo suficientemente estricto para integrarse con casi cualquier cosa :)
Válido :
test.tost
Inválido:
prueba ...
Muchos sistemas de autenticación de usuarios basados en la web no permiten nombres de usuarios que contengan caracteres que no sean letras, números y guiones bajos.
¿Podría haber una razón técnica para eso?
Depende cómo se usan tus nombres de usuario. No hay una regla general, sin conocer el contexto.
El subrayado tradicionalmente se permitía en identificadores en la mayoría de los lenguajes de programación, y generalmente era el único carácter "especial" permitido.
Pero muchos inicios de sesión web aún no aceptan CUALQUIER carácter especial y están limitados a caracteres y dígitos en mayúscula / minúscula ...
Y otros están bien con los realmente especiales ;-)
La razón principal por la que los sitios web hacen cumplir estas reglas es la legibilidad (porque los nombres de usuario como ~-|this<>one|-~
son molestos). También podría ser porque es menos trabajo (los guiones bajos se corresponden con un /w+
regex, mientras que los guiones y otros caracteres especiales no), pero dudo que sea una razón importante.
No hay un "estándar", por lo que si ninguno de los motivos anteriores le molesta, haga lo que desee. Personalmente, me gustaría ver que más sitios web acepten guiones y puntos, pero en realidad es una preferencia personal de legibilidad y coherencia frente a expresión.
Las personas pueden querer escribir sus nombres de usuario como_esto en lugar de likethis o LikeThis.
Limitarlo a estos caracteres (o incluso al subconjunto ASCII de ellos) impide que se acepten nombres de usuario como 𝕋𝓱𝓲𝑺. Al no aceptar estos caracteres, puede evitar una amplia gama o nombres de usuario que se parecen a otros nombres de usuario.
No me gusta el argumento de legibilidad cuando interfiere con la capacidad de las personas para usar su idioma nativo en los nombres de usuario.
Te recomiendo que experimentes con el uso de clases de caracteres que incorporan http://msdn.microsoft.com/en-us/library/20bw873z.aspx#SupportedUnicodeGeneralCategories o http://msdn.microsoft.com/en-us/library/20bw873z.aspx#SupportedNamedBlocks . No he intentado esto, pero
[/p{L}/p{N}/p{M}]
podría valer un experimento
Porque permite que se representen varias palabras de una manera algo legible.
Peronally realmente, realmente deseo que la gente amplíe las cosas un poco para permitir guiones y apóstrofes. Esto permitiría a las personas usar nombres fonéticos que no sean inglés (por ej .: nombres tribales nativos americanos como She-Ki y Ke`Xthsa-Tse)
Sí: para evitar tener que escapar de los personajes especiales. Los programadores perezosos simplemente dejarán caer lo que el usuario escribe, directamente en el código en algún lugar y esto es lo que lleva a los ataques de inyección.
Incluso si no se usa maliciosamente, permitir que el usuario escriba caracteres que entren en conflicto en otro lugar puede ser más complicado de lo necesario. Por ejemplo, si decide crear un directorio del sistema de archivos por usuario, para almacenar sus cargas, entonces el nombre de usuario debe cumplir con las reglas de denominación del directorio en ese sistema operativo (por ejemplo, no //:*?"<>|
En Windows).
Una vez que haya evitado enfrentamientos como el directorio que nombra uno, y eliminado "'';%
y //
para evitar ataques de inyección, ha eliminado la mayoría de los signos de puntuación, y" ¿por qué alguien incluso necesita puntuación en su nombre de usuario "?
Era mucho más fácil escribir una expresión regular rápida para validar los nombres de usuario contra [a-zA-Z0-9_]
y terminar con eso, que hacer un faff con la determinación de todos los signos de puntuación posibles que no chocarían, o mapearlos con otros caracteres en de alguna manera.
Entonces, como muchas cosas en informática, tan pronto como suficientes personas comienzan a tener letras, números y guiones bajos para los nombres de usuario, y las personas comienzan a hacer nombres de usuario para esa especificación, ¡se convirtió en el estándar de facto y se autoperpetúa!
Un sistema bien diseñado no necesariamente necesita evitar caracteres especiales en los nombres de usuario.
Dicho esto, la razón por la cual los subrayados han sido tradicionalmente aceptados, es que el guión bajo se trata típicamente como un carácter de "palabra", junto con letras y números. Por lo general, es el único otro personaje con esta distinción. Esto es cierto en expresiones regulares, e incluso en un nivel base en la mayoría de los sistemas operativos (escriba un guión bajo en una palabra y haga doble clic en las letras. La selección se extenderá más allá del guión bajo. Ahora intente lo mismo con un guión, lo más probable es que no.)