我想用正则表达式创建某种密码检查器,并根据密码强度更新进度条。
所以我创建了对象数组,因为我需要检查正则表达式,如果输入值与正则表达式匹配,则将百分比传递给进度条。
var passwordsRegex = [{ weak: '^[a-z]+$', percentage: 20},
{ good: '[a-zA-Z]+$', percentage: 50},
{ normal: '^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$', percentage: 70},
{ strong: '(?=^.{8,}$)(?=.*\d)(?=.*[!@#$%^&*]+)(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$', percentage: 100}];
$('#pass').on('keyup', function(e) {
var value = $(this).val();
if(value == passwordsRegex[?].?) {
...
}
});
function progress(percent, $element) {
var progressBarWidth = percent * $element.width() / 100;
$element.find('div').animate({ width: progressBarWidth }, 500).html(percent + "% ");
}
progress(50, $('#progressBar'))
有人可以在不编写很多条件语句的情况下帮助您检查值是否与其中一个正则表达式匹配。
谢谢
答案 0 :(得分:0)
首先,您需要更改数组,以使regexp位于具有相同名称的属性中。如果要使用描述性名称,请将其放在另一个属性中:
var passwordsRegex = [
{ description: "strong", regex: '(?=^.{8,}$)(?=.*\d)(?=.*[!@#$%^&*]+)(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$', percentage: 100},
{ description: "normal", regex: '^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$', percentage: 70},
{ description: "good", regex: '[a-zA-Z]+$', percentage: 50},
{ description: "weak", regex: '^[a-z]+$', percentage: 20},
];
使用for
循环测试每个正则表达式,并在其中一个成功后停止(我已将它们重新排序为最强的一个)。
$('#pass').on('keyup', function(e) {
const value = $(this).val();
for (let i = 0; i < passwordsRegex.length; i++) {
if (value.match(passwordsRegex[i].regex) {
progress(passwordsRegex[i].percentage, $("#progressBar"));
break;
}
}
});