【问题标题】:regex to restrict special characters except few正则表达式限制特殊字符,除了少数
【发布时间】:2021-11-21 22:44:25
【问题描述】:

我能够编写一个正则表达式来验证输入框的以下条件。

  1. 至少包含 14 个字符
  2. 至少包含 1 个大写字母 (A-Z)
  3. 至少包含 1 个简单字母 (a-z)
  4. 至少包含 1 个数字 (0-9)
  5. 至少包含 1 个特殊符号 (+=!@#$%^&*)

正则表达式 -> ^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[+=!@#$%^&*])(?=\\S+$).{14,}$

但是,此正则表达式允许其他未提及的特殊字符。我想限制除这些+=!@#$%^&*之外的所有特殊字符

有人可以帮我用上述标准修改给定的正则表达式吗?

【问题讨论】:

    标签: javascript regex regex-negation


    【解决方案1】:

    您可以使用字符集将允许的字符限制为特定集,而不是允许任何字符的.

    ^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[+=!@#$%^&*])(?=\\S+$)[0-9A-Za-z+=!@#$%^&*]{14,}$
    

    【讨论】:

      【解决方案2】:

      为什么不用集合而不是正则表达式:

      import string
      upperSet   = set(string.ascii_uppercase)
      lowerSet   = set(string.ascii_lowercase)
      numberSet  = set("0123456789")
      specialSet = set("+=!@#$%^&*")
      allSets    = [upperSet,lowerSet,numberSet,specialSet] 
      validSet   = set().union(*allSets)
      
      isValid = len(pw)>=14 and validSet.issuperset(pw) \
                and all(s.intersection(pw) for s in allSets)
      

      您还可以使用 translate 方法将每组字符转换为四个代码,然后检查它们是否完全存在于翻译后的字符串中:

      validCheck = str.maketrans(string.ascii_letters + "0123456789" + "+=!@#$%^&*",
                                 "1"*26+"2"*26+"3"*10+"4"*10)
      
      isValid = len(pw)>=14 and set('1234') == set(pw.translate(validCheck))))
      

      【讨论】:

        猜你喜欢
        • 2016-05-26
        • 1970-01-01
        • 1970-01-01
        • 2018-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多