Autor: Dflying Chen ( http://dflying.cnblogs.com/ )
Este artigo é derivado de um artigo no Vitamin C.net que usa métodos matemáticos para reduzir significativamente a dificuldade de implementar um julgamento lógico. O código de detecção vem da classe JS do THIN para verificar a força da senha.
Atlas fornece poderosas funções orientadas a objetos de JavaScript do lado do cliente. Vi as postagens dos dois acima nos últimos dias e sinto que esse requisito funcional ainda é muito comum no desenvolvimento diário. Não tenho nada para fazer à noite, então encapsulo as funções acima em Behaviors in Atlas para facilitar a reutilização. Para obter informações sobre o comportamento do Atlas, consulte: Criando comportamento personalizado no ASP.NET Atlas.
Seguindo as cinco etapas de personalização neste artigo sobre Criando um comportamento personalizado no ASP.NET Atlas, é fácil escrever esse comportamento. A parte mais importante é o algoritmo para testar a força da senha. Fui preguiçoso aqui e simplesmente copiei o código THIN completamente (irmão, não me repreenda -_-b). . Esta função de detecção será acionada toda vez que o usuário pressionar uma tecla na entrada correspondente:
function keyPressHandler() {
// você pode refatorar esta parte para tornar o código mais 'parecido com o Atlas' :-)
var PasswordStrength ={
Nível: ["Alto, está muito alto", "Está tudo bem", "Droga, está tudo bem"],
LevelValue: [30,20,0], // Valor de força
Fator: [1,2,5], // Acrescentos de caracteres, respectivamente letras, números, outros
KindFactor: [0,0,10,20],//A senha contém vários tipos de adendos
Regex: [/[a-zA-Z]/g,/d/g,/[^a-zA-Z0-9]/g] //Caractere números regulares e outras regras regulares
}
PasswordStrength.StrengthValue = função (senha)
{
var forçaValor = 0;
var CompostoKind = 0;
for(var i = 0; i < this.Regex.length;i++)
{
var caracteres = pwd.match(this.Regex[i]);
if (caracteres! = nulo)
{
forçaValor += chars.length * this.Factor[i];
CompostoKind++;
}
}
forçaValue += this.KindFactor[ComposedKind];
força de retornoValor;
}
PasswordStrength.StrengthLevel = função (senha)
{
var valor = this.StrengthValue(pwd);
for(var i = 0; i < this.LevelValue.length; i++)
{
if(valor >= this.LevelValue[i] )
retorne este.Nível[i];
}
}
//fim da seção de refatoração
$(_checkResultLabelID).innerHTML = PasswordStrength.StrengthLevel(this.control.element.value);
}
Ao mesmo tempo, o atributo checkResultLabelID é adicionado a este Behavior para especificar o Label para exibição dos resultados do teste:
var _checkResultLabelID;
this.get_checkResultLabelID = function() {
retornar _checkResultLabelID;
}
this.set_checkResultLabelID = função (valor) {
if (_checkResultLabelID! = valor) {
_checkResultLabelID = valor;
this.raisePropertyChanged('checkResultLabelID');
}
}
Você também pode adicionar facilmente algumas funções mais sofisticadas, como alterar a cor de fundo do texto do prompt para entradas de diferentes intensidades, etc. Para o código-fonte completo, consulte o download no final deste artigo.
As etapas para teste também são muito simples. Primeiro, adicione uma referência a este comportamento no ScriptManager:
<atlas:ScriptManager runat="server" ID="ScriptManager1">.
<Roteiros>
<atlas:ScriptReference Path="PasswordStrengthCheckBehavior.js" />
</Scripts>
</atlas:ScriptManager>
Em seguida, adicione uma entrada à página para inserir a senha (o tipo não está definido como senha no programa de demonstração) e um intervalo para exibir os resultados do teste:
<div>
Digite uma senha:
<input id="senha" type="texto" />
<span id="resultado"></span>
</div>
Finalmente, o Atlas Script promove a entrada acima para um controle Atlas e adiciona o comportamento que acabamos de escrever:
<script type="text/xml-script">
<página xmlns:script=" http://schemas.microsoft.com/xml-script/2005 ">
<componentes>
<textBox id="senha">
<comportamentos>
<passwordStrengthCheckBehavior checkResultLabelID="resultado" />
</comportamentos>
</textBox>
</componentes>
</página>
</script>
É simples assim, como segue no navegador:
Senha simples:
Senha média:
Senha complexa:
O código-fonte e os programas de exemplo podem ser baixados aqui: