Java 使用正则表达式进行密码验证
我在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对于以下项无效: 图案
^.*(?=.{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]
,等等。