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