
Estoy intentando establecer una regla para nuevos usuarios.
Cambié el /etc/adduser.conf
archivo agregando la línea:
NAME_REGEX="[A-Z]{1}[a-z]{5,9}$"
pero después de eso, el sistema no acepta ningún usuario... ¡siempre dice que no coincide con el NAME_REGEX
in /etc/adduser.conf
!
Cuando comento la línea, acepta cualquier usuario, ¡pero yo tampoco quiero eso! Quiero que todos los usuarios tengan la siguiente política:
debe comenzar con una letra MAYÚSCULAS
El nombre de usuario debe tener un mínimo de 5 letras y un máximo de 9 letras. por ej. "Nuevo usuario" debe ser aceptado, "nuevo usuario" no y "Hereisanewuser" tampoco.
¿Cómo debo proceder?
Respuesta1
Después de probar varias de las expresiones regulares anteriores NAME_REGEX
sin éxito (el código html oculta algunos \
caracteres, al menos), logré escribir una adecuada y funcional que incluya el símbolo de punto, como esta:
NAME_REGEX="^[a-z][-a-z0-9_\.]*\$?$"
Esto significa: comienza con a-z
, seguido de cualquier número de guiones, a-z
guiones 0-9
bajos o puntos, y puede terminar con un $
.
(Tenga en cuenta que incluso la línea de configuración predeterminada comentada en adduser.conf
el archivo de algunas distribuciones basadas en Debian tiene una $
sintaxis incorrecta, solo que \$
en lugar de \$?$
).
Respuesta2
Utilizar esta:
NAME_REGEX="^[A-Z][[:alpha:]]{4,8}$"
Esto coincidirá [A-Z]
con el comienzo del nombre y el nombre puede contener cualquier carácter alfabético, es decir, [A-Za-z]
el total de caracteres estaría entre 5 y 9.
Por otro lado, si deseas solo letras minúsculas después de la primera mayúscula:
NAME_REGEX="^[A-Z][a-z]{4,8}$"
Además, si desea cualquier número o mayúscula/minúscula (usando clases de caracteres):
NAME_REGEX="^[A-Z]([[:alpha:]]|[[:digit:]]){4,8}$"
Usando rangos:
NAME_REGEX="^[A-Z]([A-Za-z]|[0-9]){4,8}$"
Respuesta3
Ya hay respuestas correctas, y la respuesta que voy a proporcionar sugiere al final hacer exactamente lo que las otras respuestas sugirieron hacer, así que técnicamente esto es un duplicado, pero creo que para dar una explicación es mejor aquí.
NAME_REGEX="[A-Z]{1}[a-z]{5,9}$"
Esta expresión regular coincide con cualquier cadena cuya última parte sea una subcadena de 6 a 10 caracteres que comience con una letra mayúscula, por lo que coincide con cadenas como "usErname", "USErname", "12Ername".
Dejando de lado el hecho de que esto no es algo que esperas, el hecho de que no se acepte ningún nombre de usuario probablemente lo sea (y lo siento por lo probable, pero/etc/adduser.conf
está muy mal documentado) debido al hecho de que la expresión regular debe estar anclada tanto al inicio como al final (la otra posibilidad es que siempre haya estado probando usando nombres de usuario que no coinciden con el criterio anterior).
Entonces, como ya se sugirió, primero ancle el inicio de la cadena:
NAME_REGEX="^[A-Z]{1}[a-z]{5,9}$"
Luego puede eliminar el especificador de número de ocurrencias {1}
después de la clase de carácter [A-Z]
, ya que de manera predeterminada una clase de carácter coincide solo con una ocurrencia:
NAME_REGEX="^[A-Z][a-z]{5,9}$"
Luego, debe disminuir el número mínimo y máximo de apariciones en el especificador de número de apariciones {5,9}
a 4
y 8
, ya que desea aceptar cadenas de entre 5 y 9 caracteres de longitud:
NAME_REGEX="^[A-Z][a-z]{4,8}$"
Respuesta4
Probé esto y funciona.
NAME_REGEX="^[A-Z][a-z]{4,8}$"
similar:expresión regular para comprobar si el primer carácter está en mayúsculas