У меня есть следующее регулярное выражение для проверки имен пользователей Windows в скрипте PowerShell.
$fqusername -imatch '^\w+[\\]\w+$'
Это отлично работает в моей среде, но я планирую выпустить его для более широкого использования и хочу убедиться, что он корректно проходит проверку и для других.
решение1
Ну, не совсем. Ты что-то упустишь.
Часть домена:
\w+
совпадения по символам слов. что нормально, пока человек не использует имя NETBIOS, а доменное имя (полностью поддерживается), чтобы это совпало STACKOVERFLOW\Zypher
... но не STACKOVERFLOW.COM\Zypher
потому, что это .
собьет сопоставление.
Пользовательская часть:
в то время как Goyuix указал, какие символы не разрешены. Это подразумевает, что ВСЕ ОСТАЛЬНЫЕ символы разрешены. Действительно распространенный пример этого — символы -
. Так что простое использование тире в качестве примера STACKOVERFLOW\Zypher-SO
не будет соответствовать.
Также <user>@<domain>
является допустимой записью для учетной записи пользователя.
Чего вы пытаетесь добиться? Возможно, есть способ лучше, чем регулярные выражения.
решение2
Вас, скорее всего, это не смутит, хотя есть несколько вещей, о которых следует знать:
Во-первых, по словамэтотСтатья TechNet, ниже приведен список символов, которые не допускаются в имени пользователя. Вот он в PowerShell:
'( ; : " <> * + = \\ | ? , )' -imatch '\w'
Он возвращает false, так что все \w
должно быть в порядке.
Во-вторых, в качестве возможного улучшения вы можете рассмотреть возможность заключения \w
в скобки, чтобы включить группировку и легкое извлечение части домена или имени пользователя из совпадения. Примечание: это (совсем немного) замедлит сопоставление и будет использовать (совсем немного) больше памяти.
В-третьих, согласно статье MS KB938447Некоторые символы рассматриваются как равные в именах пользователей/объектах. Быстрый тест показывает, что PowerShell правильно сопоставляет, что упомянутые символы с умлаутом соответствуют вашему регулярному выражению, поэтому будьте осторожны, если вы используете его для создания учетных записей, так как учетная запись может по-прежнему давать сбой в странных случаях.