Java 使用正则表达式进行密码验证

Java 使用正则表达式进行密码验证,java,xml,regex,validation,schema,Java,Xml,Regex,Validation,Schema,我在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模式有效:值“narendra1A” facet对于以下项无效: 图案

我在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模式有效:值“narendra1A” facet对于以下项无效: 图案 类型的“^.*(\?=.{6,20})(\?=.[a-z].[a-z])(\?=.[a-z])(\?=.[0-9]).$” “#AnonType_passwordcreateUser”

在这方面谁能帮忙呢

谢谢


Narendra

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

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


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

这并不能直接回答您的问题,但对您来说,这可能是一个比使用正则表达式进行密码质量检查更好的选择

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


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

密码正则表达式模式

((?=.*\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)(?=.*[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

您的模式使用XML文档中禁止的字符。
要使事情变得简单,请将密码放入CDATA

您的模式使用XML文档中禁止的字符。 要使事情变得简单,请将密码放入CDATA

试试这个

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

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

与问题无关,但您应该在
^
之后删除第一个
*
。这是不必要的,并且使你的正则表达式效率很低。此外,如果您认为您将密码长度限制为6-20个字符,则不会。100个字符的字符串可以通过这个正则表达式。为什么有20个字符的上限?@Gumbo:没关系,如果你仔细看正则表达式,任何超过5个字符的字符串都可以通过:)与问题无关,但是你应该删除
^
后面的第一个
*
。这是不必要的,并且使你的正则表达式效率很低。此外,如果您认为您将密码长度限制为6-20个字符,则不会。100个字符的字符串可以通过这个正则表达式。为什么有20个字符的上限呢?@Gumbo:没关系,如果仔细看正则表达式,任何超过5个字符的字符串都可以通过:)最好使用补码,而不是
。所以
\D*\D
[^a-z]*[a-z]
[^a-z]*[a-z]
,等等。最好使用补语,而不是
。所以
\D*\D
[^a-z]*[a-z]
[^a-z]*[a-z]
,等等。