
Ich versuche, eine Regel für neue Benutzer festzulegen.
Ich habe die /etc/adduser.conf
Datei geändert, indem ich die folgende Zeile hinzugefügt habe:
NAME_REGEX="[A-Z]{1}[a-z]{5,9}$"
aber danach akzeptiert das System keinen Benutzer mehr. Es wird immer gesagt, dass es nicht mit dem NAME_REGEX
übereinstimmt /etc/adduser.conf
!
Wenn ich die Zeile kommentiere, akzeptiert sie jeden Benutzer, aber das will ich auch nicht! Ich möchte, dass alle Benutzer die folgende Richtlinie haben:
muss mit einem Großbuchstaben beginnen
Der Benutzername muss mindestens 5 und höchstens 9 Buchstaben haben. Beispiel: „Neuer Benutzer“ sollte akzeptiert werden, „newuser“ nicht und „Hier ist ein neuer Benutzer“ auch nicht!
Wie soll ich vorgehen?
Antwort1
Nachdem ich mehrere der oben genannten regulären Ausdrücke NAME_REGEX
erfolglos getestet hatte ( \
zumindest im HTML-Code sind einige Zeichen versteckt), gelang es mir, einen richtigen und funktionierenden Ausdruck zu schreiben, der das Punktsymbol enthält, und zwar genau wie dieser:
NAME_REGEX="^[a-z][-a-z0-9_\.]*\$?$"
Dies bedeutet: Beginnen Sie mit a-z
, gefolgt von einer beliebigen Anzahl von Bindestrichen oder a-z
oder 0-9
Unterstrichen oder Punkten und beenden Sie es optional mit einem $
.
(Beachten Sie, dass sogar die standardmäßig auskommentierte Konfigurationszeile in den Dateien einiger Debian-basierter Distributionen die falsche Syntax adduser.conf
hat und einfach anstelle von steht .)$
\$
\$?$
Antwort2
Benutze das:
NAME_REGEX="^[A-Z][[:alpha:]]{4,8}$"
Dies stimmt [A-Z]
mit dem Anfang des Namens überein. Der Name kann beliebige alphabetische Zeichen enthalten, d. h. [A-Za-z]
die Gesamtzahl der Zeichen liegt zwischen 5 und 9.
Wenn Sie hingegen nach dem ersten Großbuchstaben nur Kleinbuchstaben wünschen:
NAME_REGEX="^[A-Z][a-z]{4,8}$"
Wenn Sie darüber hinaus beliebige Zahlen oder Groß-/Kleinbuchstaben wünschen (unter Verwendung von Zeichenklassen):
NAME_REGEX="^[A-Z]([[:alpha:]]|[[:digit:]]){4,8}$"
Verwenden von Bereichen:
NAME_REGEX="^[A-Z]([A-Za-z]|[0-9]){4,8}$"
Antwort3
Es gibt bereits richtige Antworten und die Antwort, die ich geben werde, schlägt am Ende vor, genau das zu tun, was in den anderen Antworten bereits vorgeschlagen wurde. Technisch gesehen handelt es sich also um ein Duplikat, aber ich denke, dass es besser ist, hier eine Erklärung abzugeben.
NAME_REGEX="[A-Z]{1}[a-z]{5,9}$"
Dieser reguläre Ausdruck stimmt mit allen Zeichenfolgen überein, deren letzter Teil eine 6-10 Zeichen lange Teilzeichenfolge ist, die mit einem Großbuchstaben beginnt. Er stimmt also mit Zeichenfolgen wie „usErname“, „USErname“, „12Ername“ überein.
Abgesehen davon, dass dies nicht etwas ist, was Sie erwarten, ist die Tatsache, dass kein Benutzername akzeptiert wird, wahrscheinlich (und entschuldigen Sie das wahrscheinlich, aber/etc/adduser.conf
ist sehr schlecht dokumentiert) aufgrund der Tatsache, dass der reguläre Ausdruck sowohl am Anfang als auch am Ende verankert sein muss (die andere Möglichkeit ist, dass Sie beim Testen immer Benutzernamen verwendet haben, die das obige Kriterium nicht erfüllen).
Verankern Sie also, wie bereits vorgeschlagen, zuerst den Anfang der Zeichenfolge:
NAME_REGEX="^[A-Z]{1}[a-z]{5,9}$"
Anschließend können Sie den Spezifizierer für die Anzahl der Vorkommen {1}
nach der Zeichenklasse entfernen [A-Z]
, da eine Zeichenklasse standardmäßig nur einem Vorkommen entspricht:
NAME_REGEX="^[A-Z][a-z]{5,9}$"
Anschließend sollten Sie die Mindest- und Höchstzahl der Vorkommen im Spezifizierer {5,9}
für die Anzahl der Vorkommen auf 4
und verringern 8
, da Sie Zeichenfolgen mit einer Länge von 5 bis 9 Zeichen akzeptieren möchten:
NAME_REGEX="^[A-Z][a-z]{4,8}$"
Antwort4
Habe dies getestet und es funktioniert.
NAME_REGEX="^[A-Z][a-z]{4,8}$"
ähnlich:Regulärer Ausdruck zum Prüfen, ob das erste Zeichen ein Großbuchstabe ist