【发布时间】:2016-09-25 02:38:59
【问题描述】:
我有以下在输入内的 keyup 上运行的 javascript 函数:
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 以表明该条件已满足。我想知道是否有人对如何缩短或使其更简洁有任何提示,特别是前三个条件非常相似。
【问题讨论】:
-
啊,验证世界,快乐!在你的鞋子里,我会使用第三方库,是的,它需要额外的 kb,但它会节省你的时间。在您的情况下,jqueryvalidation.org 可能是您想要查看的内容。
-
如果它不依赖于
[data-index="#"],您可以将其全部压缩到此^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.{8}),但看起来您正在跟踪个人优势。 -
@sln 是的,没错...我有一个根据每个条件更新的进度条。只是想知道是否有人对压缩此内容或使其更简洁有任何提示。
-
你可以将代码压缩成一个for循环和一些数组,但是由于单独跟踪,上下文不能改变。
-
@sln 是的,我就是这么想的,看起来这样会更干净。只是不确定该怎么做。想提供一个漂亮的闪亮复选标记的例子:)
标签: javascript jquery regex loops if-statement