Regex模式无法正常工作.但仅在Extjs/Javascript中

Regex pattern does not work properly.. but only in Extjs / Javascript

本文关键字:Extjs Javascript 工作 模式 常工作 Regex      更新时间:2023-09-26

我构建了一个正则表达式模式来检查密码的强度:

(?=^.{8,15}$)((?=.*'d)(?=.*[A-Z])(?=.*[a-z])|(?=.*'d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*'d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.*

它强制用户使用一个密码,该密码的字符至少来自以下4个类别中的3个:

  1. 至少1个大写字符
  2. 至少1个小写字符
  3. 至少1个数字字符
  4. 至少1个特殊字符/符号

注意:它还强制执行最小和最大长度{8,15}

该模式在服务器端PHP脚本上运行良好,我还用多个javascript Regex测试工具对其进行了测试(例如。http://www.regular-expressions.info/javascriptexample.html)。到目前为止一切看起来都很完美。。。

但是,如果我在一个简单的Extjs文本字段验证器中使用它,如果我使用所有4个类别,验证器只返回TRUE。

validator: function (value) {
        var pattern = 
            '(?=^.{8,15}$)'+
            '((?=.*'d)(?=.*[A-Z])(?=.*[a-z])|' + 
            '(?=.*'d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|' +
            '(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|' +
            '(?=.*'d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.*';
        if (value.match(pattern)) {
            return true;
        } else {
            return this.i18n.invalidPassword;
        }
    }

现在,我没有什么想法了。。。

您设置的模式不正确:

    var pattern = new RegExp(
        '(?=^.{8,15}$)'+
        '((?=.*''d)(?=.*[A-Z])(?=.*[a-z])|' + 
        '(?=.*''d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|' +
        '(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|' +
        '(?=.*''d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.*'
    );

注意''而不是'。如果你不这样做,当正则表达式代码到达'时,它就会消失。你也可以使用原生regex语法,但没有办法将其分解为多行。

编辑—特别是正则表达式中出现'd之前的''。如果不将反斜杠加倍,则正则表达式将只显示小写的"d"。