adduser.conf NAME_REGEX não está funcionando

adduser.conf NAME_REGEX não está funcionando

Estou tentando definir uma regra para novos usuários.

Alterei o /etc/adduser.confarquivo adicionando a linha:

NAME_REGEX="[A-Z]{1}[a-z]{5,9}$"

mas depois disso o sistema não aceita nenhum usuário.. sempre diz que não corresponde ao NAME_REGEXin /etc/adduser.conf!

Quando comento a linha ela aceita qualquer usuário, mas eu também não quero isso! Quero que todos os usuários tenham a seguinte política:

  1. deve começar com uma letra CAPS-ON-Letter

  2. O nome de usuário deve ter no mínimo 5 letras e no máximo 9 letras. por ex. "Newuser" deve ser aceito, "newuser" não e "Hereisanewuser" também não!

Como devo proceder?

Responder1

Depois de testar várias das expressões regulares acima NAME_REGEXsem sucesso (o código HTML está escondendo alguns \caracteres, pelo menos), consegui escrever uma adequada e funcional incluindo o símbolo de ponto final, assim:

NAME_REGEX="^[a-z][-a-z0-9_\.]*\$?$"

Isso significa: comece com a-z, seguido por qualquer número de travessões ou a-zou 0-9sublinhados ou pontos, e pode terminar com um opcional $.

(Observe que mesmo a linha de configuração padrão comentada em alguns adduser.confarquivos de distribuições baseadas em Debian tem a $sintaxe errada, apenas \$em vez de \$?$).

Responder2

Usa isto:

NAME_REGEX="^[A-Z][[:alpha:]]{4,8}$"

Isso corresponderá [A-Z]ao início do nome e o nome poderá conter quaisquer caracteres alfabéticos, ou seja, [A-Za-z]o total de caracteres ficará entre 5 e 9.

Por outro lado, se você quiser apenas letras minúsculas após a primeira maiúscula:

NAME_REGEX="^[A-Z][a-z]{4,8}$"

Além disso, se você quiser qualquer número ou maiúscula/minúscula (usando classes de caracteres):

NAME_REGEX="^[A-Z]([[:alpha:]]|[[:digit:]]){4,8}$"

Usando intervalos:

NAME_REGEX="^[A-Z]([A-Za-z]|[0-9]){4,8}$"

Responder3

Já existem respostas corretas, e a resposta que vou fornecer sugere no final fazer exatamente o que as outras respostas já sugeriram fazer, então tecnicamente isso é uma duplicata, mas acho que para dar uma explicação é melhor aqui.

NAME_REGEX="[A-Z]{1}[a-z]{5,9}$"

Este regex corresponde a qualquer string cuja última parte seja uma substring de 6 a 10 caracteres começando com uma letra maiúscula, portanto, corresponde a strings como "usErname", "USErname", "12Ername".

Deixando de lado o fato de que isso não é algo que você espera, o fato de nenhum nome de usuário estar sendo aceito é provavelmente (e desculpe pela probabilidade, mas/etc/adduser.confestá muito mal documentado) devido ao fato de o regex deve estar ancorado tanto no início quanto no final (a outra possibilidade é você estar sempre testando usando nomes de usuário que não atendem ao critério acima).

Então, como já foi sugerido, primeiro ancore o início da string:

NAME_REGEX="^[A-Z]{1}[a-z]{5,9}$"

Então você pode remover o especificador de número de ocorrências {1}após a classe de caracteres [A-Z], já que por padrão uma classe de caracteres corresponde a apenas uma ocorrência:

NAME_REGEX="^[A-Z][a-z]{5,9}$"

Então você deve diminuir o número mínimo e máximo de ocorrências no especificador de número de ocorrências {5,9}para 4e 8, já que deseja aceitar strings com 5 a 9 caracteres:

NAME_REGEX="^[A-Z][a-z]{4,8}$"

Responder4

Testei isso e funciona.

NAME_REGEX="^[A-Z][a-z]{4,8}$"

semelhante:regex para verificar se o primeiro caractere está maiúsculo

informação relacionada