【问题标题】:javascript : validate upper case and lower casejavascript:验证大写和小写
【发布时间】:2014-06-18 02:04:15
【问题描述】:

在检查大小写时是否有任何选项可以验证最小 2 个小写2 个大写? 这是我正在使用的条件。

function HasMixedCase(passwd){
    if(passwd.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/))
        return true;
    else
        return false;
}

演示:http://jsfiddle.net/Ku4mg/

【问题讨论】:

  • passwd.replace(/[A-Z]/g,'').length > 2
  • 附带说明,我强烈建议您不要对您的用户强制使用任意密码选择限制。例如,ieatbaconsandwicheslikeitaintnothang 很可能足够安全,可以在宇宙的热寂中幸存下来,尽管它都是小写的。

标签: javascript validation


【解决方案1】:

编辑以考虑 plalx 的评论:

var m;
if( !(m = passwd.match(/[a-z]/g)) || m.length < 2) return false;
if( !(m = passwd.match(/[A-Z]/g)) || m.length < 2) return false;
return true;

试图在单个正则表达式中做太多事情会导致灾难,最常见的结果是灾难性的回溯。

同样,它使您的代码更易读,一次只做一件事。

【讨论】:

  • 不要忘记match 在没有匹配项时返回null
  • @plalx 谢谢。已编辑。
【解决方案2】:

尽管@NietTheDarkAbsol 的回答显示了一种完全有效的方式,我建议您避免在函数中做太多事情。不要害怕将逻辑拆分为多个可维护的函数。

function textCaseStats(text) {
    return {
        upper: (text.match(/[a-z]/g) || []).length,
        lower: (text.match(/[A-Z]/g) || []).length
    };
}

function hasMixedCase(password) {
    var caseStats = textCaseStats(password);

    return caseStats.lower >= 2 && caseStats.upper >= 2;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 2016-05-14
    相关资源
    最近更新 更多