adduser.conf NAME_REGEX funktioniert nicht

adduser.conf NAME_REGEX funktioniert nicht

Ich versuche, eine Regel für neue Benutzer festzulegen.

Ich habe die /etc/adduser.confDatei 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:

  1. muss mit einem Großbuchstaben beginnen

  2. 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_REGEXerfolglos 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-zoder 0-9Unterstrichen 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.confhat 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.confist 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 4und 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

verwandte Informationen