
Estou tentando definir uma regra para novos usuários.
Alterei o /etc/adduser.conf
arquivo 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_REGEX
in /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:
deve começar com uma letra CAPS-ON-Letter
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_REGEX
sem 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-z
ou 0-9
sublinhados ou pontos, e pode terminar com um opcional $
.
(Observe que mesmo a linha de configuração padrão comentada em alguns adduser.conf
arquivos 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.conf
está 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 4
e 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