Ich habe den folgenden regulären Ausdruck zum Validieren von Windows-Benutzernamen in einem PowerShell-Skript.
$fqusername -imatch '^\w+[\\]\w+$'
In meiner eigenen Umgebung funktioniert das gut, ich plane jedoch, es für eine breitere Nutzung freizugeben, und möchte sicherstellen, dass es für andere korrekt validiert wird.
Antwort1
Naja, nicht ganz. Sie werden einiges verpassen.
Domänenteil:
\w+
Übereinstimmungen mit Wortzeichen. Das ist ok, solange die Person nicht den NETBIOS-Namen, sondern den Domänennamen (vollständig unterstützt) verwendet, sodass eine Übereinstimmung erzielt würde STACKOVERFLOW\Zypher
... aber nicht STACKOVERFLOW.COM\Zypher
, weil dies .
die Übereinstimmung beeinträchtigen würde.
Der Benutzerteil:
während Goyuix angegeben hat, welche Zeichen nicht erlaubt sind. Das bedeutet implizit, dass ALLE ANDEREN Zeichen erlaubt SIND. Ein sehr häufiges Beispiel hierfür sind die -
Zeichen. Nur den Bindestrich als Beispiel zu verwenden, STACKOVERFLOW\Zypher-SO
würde also nicht passen.
Ist auch <user>@<domain>
eine gültige Notation für ein Benutzerkonto.
Was versuchen Sie zu erreichen? Möglicherweise gibt es einen besseren Weg als Regex.
Antwort2
Damit kommen Sie wahrscheinlich gut zurecht, allerdings sollten Sie ein paar Dinge beachten:
Erstens, gemäßDasIm Folgenden finden Sie eine Liste der Zeichen, die in einem Benutzernamen nicht zulässig sind. Hier ist sie in PowerShell:
'( ; : " <> * + = \\ | ? , )' -imatch '\w'
Es gibt „false“ zurück, also \w
sollte alles in Ordnung sein.
Zweitens könnten Sie als mögliche Verbesserung \w
in Klammern setzen, um eine Gruppierung und einfache Extraktion des Domänen- oder Benutzernamenteils der Übereinstimmung zu ermöglichen. Hinweis: Dadurch wird die Übereinstimmung (sehr leicht) verlangsamt und (sehr leicht) mehr Speicher verbraucht.
Drittens, laut MS KB-Artikel938447bestimmte Zeichen werden in Benutzernamen/Objekten als gleich behandelt. Ein kurzer Test zeigt, dass PowerShell die genannten Zeichen mit Umlauten korrekt mit Ihrem regulären Ausdruck abgleicht. Seien Sie also vorsichtig, wenn Sie es zum Erstellen von Konten verwenden, da das Konto in ungewöhnlichen Fällen immer noch fehlschlagen kann.