【问题标题】:Javascript match function for special characters特殊字符的Javascript匹配函数
【发布时间】:2023-03-20 16:02:01
【问题描述】:

我正在处理此代码并使用“匹配”功能来检测密码强度。如何检测字符串中是否包含特殊字符?

if(password.match(/[a-z]+/)) score++;
if(password.match(/[A-Z]+/)) score++;
if(password.match(/[0-9]+/)) score++;

【问题讨论】:

  • 任何不是字母或数字的都是特殊字符匹配。

标签: javascript regex special-characters match


【解决方案1】:

如果您的意思是 !@#$% 和 ë 作为特殊字符,您可以使用:

/[^a-zA-Z ]+/

^ 表示它不是 a-z 或 A-Z 或空格。

如果你的意思只是像 !@$&$ 使用:

/\W+/

\w 匹配单词字符,\W 匹配非单词字符。

【讨论】:

    【解决方案2】:

    您必须将它们单独列入白名单,如下所示:

    if(password.match(/[`~!@#\$%\^&\*\(\)\-=_+\\\[\]{}/\?,\.\<\> ...
    

    等等。请注意,您必须使用 \ 转义正则表达式控制字符。

    虽然不如/[^A-Za-z0-9]+/ 优雅,但这将避免国际化问题(例如,不会自动将远东语言字符(如中文或日语)列入白名单。

    【讨论】:

      【解决方案3】:

      你总是可以否定字符类:

      if(password.match(/[^a-z\d]+/i)) {
          // password contains characters that are *not*
          // a-z, A-Z or 0-9
      }
      

      但是,我建议使用现成的脚本。使用上面的代码,你只需输入一堆空格,就能得到更好的分数。

      【讨论】:

        【解决方案4】:

        只做你上面做的,但是为!@#$%^&amp;*()等创建一个组。只要确保转义在正则表达式中有意义的字符,比如^(等......

        编辑——I just found this which lists characters that have meaning in regex.

        【讨论】:

          【解决方案5】:
          if(password.match(/[^\w\s]/)) score++;
          

          这将匹配任何不是字母数字或空格的内容。如果空格也应该匹配,只需使用/[^\w]/

          【讨论】:

            【解决方案6】:

            从您的正则表达式中可以看出,您将除字母数字之外的所有内容都称为特殊字符。如果是这种情况,那就去做吧。

            if(password.match(/[\W]/)) {
                // Contains special character.
            }
            

            无论如何,为什么不将这三个正则表达式合二为一。

            if(password.match(/[\w]+/gi)) {
                // Do your stuff.
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-05-09
              • 2013-07-20
              相关资源
              最近更新 更多