【问题标题】:Checking if password contains symbols as well DOES NOT WORK检查密码是否也包含符号不起作用
【发布时间】:2022-11-14 15:32:33
【问题描述】:

在 Javascript 中,我尝试添加一个这样的函数来检查输入的密码是否包含任何符号(特殊)字符,例如 !@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?

所以我这样做了:

        function checkpasswordlength(){
            var format1 = /^[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]*$/;
            var e = document.getElementById("password").value;
            if(e != "") {
                if(e.length >= 12){
                    if(e.match(format1)){
                        document.getElementById("passwordstrengthstatus").style.display = "inline";
                        document.getElementById("passwordstrengthstatus").innerHTML = "strong";
                        document.getElementById("passwordstrengthstatus").style.setProperty('background-color', '#3cb878', 'important');
                    }else{
                        document.getElementById("passwordstrengthstatus").style.display = "inline";
                        document.getElementById("passwordstrengthstatus").innerHTML = "normal";
                        document.getElementById("passwordstrengthstatus").style.setProperty('background-color', '#3cb878', 'important');
                    }
                }else{
                    document.getElementById("passwordstrengthstatus").style.display = "inline";
                    document.getElementById("passwordstrengthstatus").innerHTML = "weak";
                    document.getElementById("passwordstrengthstatus").style.setProperty('background-color', 'red', 'important');
                }
            }else{
                document.getElementById("passwordstrengthstatus").style.display = "none";
            }
        }

如您所见,它会检查密码是否不为空且长度是否超过12 个字符,然后继续检查e.match(format1)

但问题是,当我也输入这些字符时,它不会将此条件返回为真,因此消息strong没有出现,仍然显示normal屏幕上的消息。

那么这有什么问题呢?

如何解决此问题并正确检查字符串是否包含书写符号?

【问题讨论】:

  • 问题在于 ^ ,它检查字符串是否以开头,而 $ for 以结尾

标签: javascript regex


【解决方案1】:

仅当密码仅包含特殊字符时,您当前的正则表达式才匹配。尝试在里面添加 a-zA-Z0-9

^[a-zA-Z0-9!@#$%^&amp;*()_+-=[]{};':"\|,.&lt;&gt;/?]*$

【讨论】:

    【解决方案2】:

    如果您只想检查是否存在至少一个符号字符,请删除 ^$ 锚点并使用:

    var format1 = /[!@#$%^&*()_+=[]{};':"\|,.<>/?-]/;
    

    请注意,连字符已移至字符类的末尾。如果您想坚持使用原始模式并匹配整个密码,请修改为:

    var format1 = /^.*[!@#$%^&*()_+=[]{};':"\|,.<>/?-].*$/;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 2013-04-01
      • 2010-11-14
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      相关资源
      最近更新 更多