Eu tenho o seguinte regexp para validar nomes de usuários do Windows em um script do PowerShell.
$fqusername -imatch '^\w+[\\]\w+$'
Isso funciona bem em meu próprio ambiente, mas estou planejando liberá-lo para uso mais amplo e quero ter certeza de que será validado corretamente para outros.
Responder1
Bem, não exatamente. Você vai sentir falta de algumas coisas.
Parte do domínio:
\w+
correspondências em caracteres de palavras. o que está ok, até que a pessoa não use o nome NETBIOS, mas use o nome de domínio (totalmente suportado) para que corresponda STACKOVERFLOW\Zypher
... mas não STACKOVERFLOW.COM\Zypher
porque isso .
prejudicará a correspondência.
A parte do usuário:
enquanto Goyuix declarou quais personagens não são permitidos. O que isso diz implicitamente é que TODOS OS OUTROS caracteres SÃO permitidos. Um exemplo muito comum disso são os -
personagens. Portanto, apenas usar o travessão como exemplo STACKOVERFLOW\Zypher-SO
não combinaria.
Também <user>@<domain>
é uma notação válida para uma conta de usuário.
O que você está tentando realizar, pode haver uma maneira melhor que o regex.
Responder2
Você provavelmente ficará bem com isso, embora haja algumas coisas a serem observadas:
Primeiro, de acordo comesseArtigo do TechNet, a seguir está uma lista de caracteres que não são permitidos em um nome de usuário. Aqui está no PowerShell:
'( ; : " <> * + = \\ | ? , )' -imatch '\w'
Ele retorna falso, então você \w
deve ficar bem.
Em segundo lugar, como uma possível melhoria, você pode considerar colocar o \w
parêntese entre parênteses para permitir o agrupamento e a extração fácil da parte do domínio ou do nome de usuário da correspondência. Nota: Isso irá (muito ligeiramente) desacelerar a correspondência e usar (muito ligeiramente) mais memória.
Terceiro, de acordo com o artigo MS KB938447certos caracteres são tratados como iguais em nomes de usuários/objetos. Um teste rápido mostra que o PowerShell corresponde corretamente aos caracteres mencionados com trema que correspondem ao seu regex, portanto, tome cuidado se estiver usando-o para criar contas, pois a conta ainda pode falhar em casos estranhos.