【问题标题】:Using a Regular expression for password validation使用正则表达式进行密码验证
【发布时间】:2011-05-22 03:49:55
【问题描述】:

我正在使用以下正则表达式我的 java 代码。

^.*(?=.{6,20})(?=.*[a-z].*[a-z])(?=.*[A-Z])(?=.*[0-9]).*$

当我尝试在 xml 中使用相同的

^.\*(\?=.{6,20})(\?=.\*[a-z].\*[a-z])(\?=.\*[A-Z])(\?=.\*[0-9]).\*$ 

它不工作。它显示异常如下。

java.lang.IllegalArgumentException: cvc-pattern-valid:值“narendra1A” 不是方面有效的 图案 '^.*(\?=.{6,20})(\?=.*[az].*[az])(\?=.*[AZ])(\?=.*[0-9 ]).*$' 表示类型 '#AnonType_passwordcreateUser'。

任何人都可以在这方面提供帮助。

谢谢,

纳伦德拉

【问题讨论】:

  • 与问题无关,但您应该删除^ 之后的第一个.*。这是不必要的,并且使您的正则表达式非常低效。此外,如果您认为您将密码长度限制为 6-20 个字符,那么您不是。一个 100 个字符的字符串可以很好地通过这个正则表达式。
  • 为什么有20个字符的上限?
  • @Gumbo:没关系,如果你仔细查看正则表达式,任何超过 5 个字符的字符串都会通过 :)

标签: java xml regex validation schema


【解决方案1】:

这并不能直接回答您的问题,但与尝试使用正则表达式进行密码质量检查相比,它可能是您更好的选择。

vt-password 库是一个出色的 Java 库,它实现了基于规则的密码质量检查。除了计算字符/字符类之外,它还可以检查字典、检查以前使用的密码、检查重复字符等。

(如果您使用 Spring,在 Spring XML 连接文件中配置密码规则对象非常简单。这允许您在不更改代码的情况下调整规则。)

【讨论】:

    【解决方案2】:

    密码正则表达式模式

    ((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})
    

    说明

    (           # Start of group
      (?=.*\d)      #   must contains one digit from 0-9
      (?=.*[a-z])   #   must contains one lowercase characters
      (?=.*[A-Z])   #   must contains one uppercase characters
      (?=.*[@#$%])  #   must contains one special symbols in the list "@#$%"
         .          #     match anything with previous condition checking
           {6,20}   #        length at least 6 characters and maximum of 20 
    )           # End of group
    

    【讨论】:

    • 最好使用补语而不是.。所以\D*\d[^a-z]*[a-z][^A-Z]*[A-Z]
    【解决方案3】:

    您的模式使用了 XML 文档中禁止使用的字符。 为简单起见,将密码放入 CDATA。

    【讨论】:

      【解决方案4】:

      试试这个

      ^.\*(\?:.{6,20})(\?:.\*[a-z].\*[a-z])(\?:.\*[A-Z])(\?:.\*[0-9]).\*$ 
      

      【讨论】:

        猜你喜欢
        • 2021-10-17
        相关资源
        最近更新 更多