繁体   English   中英

匹配多个正则表达式

[英]Match multiple Regex

我想用正则表达式创建某种密码检查器,并根据密码强度更新进度条。

所以我创建了对象数组,因为我需要检查正则表达式,如果输入值与正则表达式匹配,则将百分比传递给进度条。

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'))

有人可以在不编写很多条件语句的情况下帮助您检查值是否与正则表达式之一匹配。

谢谢

首先,您需要更改数组,以使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;
        }
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM