我有以下javascript函数在输入中的keyup上运行:
var passwordInput = document.getElementsByName("newPassword")[0].value;
var upperCase= new RegExp('[A-Z]');
var lowerCase= new RegExp('[a-z]');
var numbers = new RegExp('[0-9]');
if ( passwordInput.match(lowerCase) ) {
$('.strength-check__rule[data-index="1"]').addClass('check-rule--pass');
} else {
$('.strength-check__rule[data-index="1"]').removeClass('check-rule--pass');
}
if (passwordInput.match(upperCase)) {
$('.strength-check__rule[data-index="2"]').addClass('check-rule--pass');
} else {
$('.strength-check__rule[data-index="2"]').removeClass('check-rule--pass');
}
if(passwordInput.match(numbers)) {
$('.strength-check__rule[data-index="3"]').addClass('check-rule--pass');
} else {
$('.strength-check__rule[data-index="3"]').removeClass('check-rule--pass');
}
if(passwordInput.length >= 8) {
$('.strength-check__rule[data-index="4"]').addClass('check-rule--pass');
} else {
$('.strength-check__rule[data-index="4"]').removeClass('check-rule--pass');
}
每个条件内的addClasses只是向li添加一个类,以显示已满足该条件。我想知道是否有人有任何关于我如何缩短或使其更简洁的提示,特别是前三个非常相似的条件。
答案 0 :(得分:1)
也许这可能有助于保存一些行和字符:
var passwordInput = document.getElementsByName("newPassword")[0].value;
var upperCase= new RegExp('[A-Z]');
var lowerCase= new RegExp('[a-z]');
var numbers = new RegExp('[0-9]');
var x = [0,0,0,0];
x[0] = passwordInput.match(lowerCase) ? 1 : 0;
x[1] = passwordInput.match(upperCase) ? 1 : 0;
x[2] = passwordInput.match(numbers) ? 1 : 0;
x[3] = passwordInput.length > 7 ? 1 : 0;
for (var i = 0; i < 4; i++) {
if (x[i] == 1) {
$('.strength-check__rule[data-index="' + (i+1) + '"]').addClass('check-rule--pass');
} else {
$('.strength-check__rule[data-index="' + (i+1) + '"]').removeClass('check-rule--pass');
}
}
答案 1 :(得分:1)
怀疑它可以缩短得多:
<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','//connect.facebook.net/en_US/fbevents.js');
fbq('init', 'Pixel_ID_1');
fbq('addPixelId', 'Pixel_ID_2');
fbq('track', "PageView");
fbq('track', 'Purchase', {value: '{{ subtotal_price | money_without_currency }}',currency: '{{ shop.currency }}'});
</script>
<noscript>
<img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id=Pixel_ID_1&ev=PageView&noscript=1"
/>
<img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id=Pixel_ID_2&ev=PageView&noscript=1"
/>
答案 2 :(得分:0)
根据您的脚本,我将其重构为不同的东西。它可以被考虑得更好但是你的想法是你有一个评估密码强度的功能,并且从那个值开始,你操纵强度计。
<input type="text" name="newPassword" onkeyup="validate();">
<ul class="strength">
<li class="strength-1">*</li>
<li class="strength-2">*</li>
<li class="strength-3">*</li>
<li class="strength-4">*</li>
</ul>
<script type="text/javascript">
$('ul.strength').css('list-style-type', 'none').find('li').css('float', 'left').hide();
function getPasswordStrength(password) {
var strength = 0;
if(password.match(/[A-Z]/)) { strength++; }
if(password.match(/[a-z]/)) { strength++; }
if(password.match(/[0-9]/)) { strength++; }
if(password.length > 8) { strength++; }
return strength;
}
function validate() {
var strength = getPasswordStrength(document.getElementsByName("newPassword")[0].value);
$('ul.strength').find('li').hide();
for(var i = 1; i < strength + 1; i++) {
$('li.strength-' + i).show();
}
}
</script>
答案 3 :(得分:0)
我猜您可以使用switch
.attr()
来更改类,例如:
$("#pass").keyup(function(e) {
var pass = $("#pass").val();
switch (true) {
case /((?=.*[a-z])(?=.*[A-Z])(?=.*[\d])(?=.{8,})[^ ]*)/.test(pass):
$("#stenght").attr("class", 'green');
break;
case /((?=.*[a-z])(?=.*[A-Z])(?=.*[\d])[^ ]*)/.test(pass):
$("#stenght").attr("class",'blue');
break;
case /((?=.*[a-z])(?=.*[A-Z])[^ ]*)/.test(pass):
$("#stenght").attr("class", 'orange');
break;
case /((?=.*[a-z])[^ ]*)/.test(pass):
$("#stenght").attr("class",'red');
break;
}
});
.red{color:red;} .orange{color:orange;} .blue{color:blue;} .green{color:green;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="pass" type="text"><br>
<span class="red" id="stenght">PASSWORD STENGHT<span>