Can validate using Regular Expressions, where:
/.{6,}/ → 6 caracteres ou mais
/[A-Z]{1,}/ → 1 letra maiúscula ou mais
/[0-9]{1,}/ → 1 número ou mais
I only modified your HTML by placing the sentences inside each div
and changing the background color according to the criteria met by the above expressions.
I used an event oninput
to listen when something is entered in the password field. This event will call the function val()
that will validate the password.
I also used an event onsubmit
which will detect when you try to submit it. This event will also query the function val()
, who will return true
if the password is valid and equal to the field confirmar_senha
, or false
, otherwise. If you return false
the form will not be sent.
Look how it turned out:
document.addEventListener("DOMContentLoaded", function(){
document.forms[0].onsubmit = function(e){
return val(e);
}
senha.oninput = function(e){
val(e);
}
function val(e){
var passo, passo1, passo2,
v = senha.value,
cor = "#fff",
e = e.type == "submit";
// verifica se tem 6 caracteres ou mais
if(v.match(/.{6,}/)){
barra.style.backgroundColor = "#FFFEB5";
passo = true;
}else{
barra.style.backgroundColor = cor;
passo = false;
}
// verifica se tem ao menos uma letra maiúscula
if(v.match(/[A-Z]{1,}/)){
barra_1.style.backgroundColor = "#FFD27E";
passo1 = true;
}else{
barra_1.style.backgroundColor = cor;
passo1 = false;
}
// verifica de tem ao menus um número
if(v.match(/[0-9]{1,}/)){
barra_2.style.backgroundColor = "#D8FFCD";
passo2 = true;
}else{
barra_2.style.backgroundColor = cor;
passo2 = false;
}
// o formulário só será enviado pelo evento submit
// e todos os passos devem ser verdadeiros para validar
if(passo && passo1 && passo2 && v == confirma_senha.value && e){
alert("Senha ok!");
return true;
}else if(e){
alert("Senha inválida ou não conferem");
return false;
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="pagina.php">
<div class="form-group">
<label for="exampleInputEmail1">E-mail</label>
<input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="email">
</div>
<div class="form-group">
<label for="senha">Senha</label>
<input type="password" class="form-control" id="senha"></br>
<div class="row" id="barras">
<div id="barra" class="col-md-3">Pelo menos 6 caracteres</div>
<div id="barra_1" class="col-md-3">Pelo menos 1 letra maiúscula</div>
<div id="barra_2" class="col-md-3">Pelo menos 1 número</div>
</div>
</div>
<div class="form-group">
<label for="confirma_senha">Confirme sua senha</label>
<input type="password" class="form-control" id="confirma_senha">
</div>
<button class="btn btn-primary">Cadastrar</button>
</form>
Since you use Bootstrap, you can do the same thing using jQuery codes. In this case the difference is not too big:
$(document).ready(function(){
$("form").submit(function(e){
return val(e);
});
$(senha).on("input", function(e){
val(e);
});
function val(e){
var passo, passo1, passo2,
v = senha.value,
cor = "#fff", // cor padrão das divs
e = e.type == "submit";
// verifica se tem 6 caracteres ou mais
if(v.match(/.{6,}/)){
$(barra).css("background-color", "#FFFEB5");
passo = true;
}else{
$(barra).css("background-color", cor);
passo = false;
}
// verifica se tem ao menos uma letra maiúscula
if(v.match(/[A-Z]{1,}/)){
$(barra_1).css("background-color", "#FFD27E");
passo1 = true;
}else{
$(barra_1).css("background-color", cor);
passo1 = false;
}
// verifica de tem ao menus um número
if(v.match(/[0-9]{1,}/)){
$(barra_2).css("background-color", "#D8FFCD");
passo2 = true;
}else{
$(barra_2).css("background-color", cor);
passo2 = false;
}
// o formulário só será enviado pelo evento submit
// e todos os passos devem ser verdadeiros para validar
if(passo && passo1 && passo2 && v == $(confirma_senha).val() && e){
alert("Senha ok!");
return true;
}else if(e){
alert("Senha inválida ou não conferem");
return false;
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="pagina.php">
<div class="form-group">
<label for="exampleInputEmail1">E-mail</label>
<input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="email">
</div>
<div class="form-group">
<label for="senha">Senha</label>
<input type="password" class="form-control" id="senha"></br>
<div class="row" id="barras">
<div id="barra" class="col-md-3">Pelo menos 6 caracteres</div>
<div id="barra_1" class="col-md-3">Pelo menos 1 letra maiúscula</div>
<div id="barra_2" class="col-md-3">Pelo menos 1 número</div>
</div>
</div>
<div class="form-group">
<label for="confirma_senha">Confirme sua senha</label>
<input type="password" class="form-control" id="confirma_senha">
</div>
<button class="btn btn-primary">Cadastrar</button>
</form>
I also removed the type="submit"
of button
, for he within the
form is already of the type submit
, you don’t have to declare that.
What would be the function of these "slash"?
– Sam
https://answall.com/q/58857/101
– Maniero
Check the input value with a regular expression and then show/hide or modify the class or color of a div
– Costamilam