J'essaie de définir une règle pour les nouveaux utilisateurs.
J'ai changé le fichier /etc/adduser.conf
en ajoutant la ligne:
NAME_REGEX="[A-Z]{1}[a-z]{5,9}$"
mais après cela, le système n'accepte aucun utilisateur .. dit toujours qu'il ne correspond pas au NAME_REGEX
dans /etc/adduser.conf
!
Lorsque je commente la ligne, elle accepte n'importe quel utilisateur, mais je ne le veux pas non plus! Je veux que tous les utilisateurs aient la politique suivante:
doit commencer par une lettre CAPS-ON-Letter
Le nom d'utilisateur doit avoir un minimum de 5 lettres et un maximum de 9 lettres. par ex. "Newuser" devrait être accepté, "newuser" pas et "Hereisanewuser" non plus!
Comment dois-je procéder?
Utilisez ceci:
NAME_REGEX="^[A-Z][[:alpha:]]{4,8}$"
Ceci correspondra à [A-Z]
au début du nom et leur nom peut contenir n’importe quel caractère alphabétique, par exemple [A-Za-z]
, le nombre total de caractères étant compris entre 5 et 9.
Par contre, si vous ne voulez que des lettres minuscules après la première lettre majuscule:
NAME_REGEX="^[A-Z][a-z]{4,8}$"
De plus, si vous souhaitez n’importe quel nombre ou n’importe quelle majuscule/minuscule (en utilisant des classes de caractères):
NAME_REGEX="^[A-Z]([[:alpha:]]|[[:digit:]]){4,8}$"
Utilisation des gammes:
NAME_REGEX="^[A-Z]([A-Za-z]|[0-9]){4,8}$"
Il y a déjà des réponses correctes, et la réponse que je vais donner suggère finalement de faire exactement ce que les autres réponses suggéraient déjà de faire, donc techniquement, c'est un doublon, mais je pense que pour donner une explication, c'est mieux ici.
NAME_REGEX="[A-Z]{1}[a-z]{5,9}$"
Cette expression rationnelle correspond à toute chaîne dont la dernière partie est une sous-chaîne de 6 à 10 caractères commençant par une lettre majuscule. Elle correspond donc aux chaînes telles que "usErname", "USErname", "12Ername".
Mis à part le fait que ce n'est pas quelque chose que vous attendez, le fait qu'aucun nom d'utilisateur n'a été accepté est probablement (et désolé, probablement, mais /etc/adduser.conf
est très mal documenté ) à cause de au fait que l'expression régulière doit être ancrée au début et à la fin (l'autre possibilité étant que vous avez toujours testé avec des noms d'utilisateur ne correspondant pas au critère ci-dessus).
Donc, comme cela a déjà été suggéré, commencez par ancrer le début de la chaîne:
NAME_REGEX="^[A-Z]{1}[a-z]{5,9}$"
Ensuite, vous pouvez supprimer le spécificateur de nombre d'occurrences {1}
après la classe de caractères [A-Z]
, car une classe de caractères correspond à une seule occurrence:
NAME_REGEX="^[A-Z][a-z]{5,9}$"
Ensuite, vous devez décrémenter le nombre minimal et maximal d'occurrences dans le spécificateur de spécification d'occurrences {5,9}
à 4
et 8
, car vous souhaitez accepter des chaînes de 5 à 9 caractères:
NAME_REGEX="^[A-Z][a-z]{4,8}$"
Testé cela et cela fonctionne.
NAME_REGEX="^[A-Z][a-z]{4,8}$"
similaire: regex-à-vérifier-si-le-premier-caractère-est-majuscule
Après avoir testé plusieurs des expressions régulières ci-dessus pour NAME_REGEX
sans succès (le code html cache quelques caractères \
, au moins), j'ai réussi à écrire une expression correcte et fonctionnelle comprenant le symbole de période, comme ci-dessous. cette:
NAME_REGEX="^[a-z][-a-z0-9_\.]*\$?$"
Cela signifie: commencez par a-z
, suivi d'un nombre quelconque de tirets ou a-z
ou 0-9
, de tirets bas ou de points, et peut être terminé par un $
facultatif.
(Notez que même la ligne de configuration par défaut commentée dans le fichier adduser.conf
de certaines distributions basées sur Debian a la syntaxe $
incorrecte, mais simplement \$
au lieu de \$?$
).