我正在使用以下正则表达式我的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'。
任何人都可以在这方面提供帮助。
谢谢,
纳伦德拉
答案 0 :(得分:3)
这并不能直接回答您的问题,但对于您来说,这可能是比使用正则表达式进行密码质量检查更好的选择。
vt-password库是一个优秀的Java库,它实现了基于规则的密码质量检查。除了计算字符/字符类之外,它还可以检查词典,检查以前使用过的密码,检查重复的字符等等。
(如果您使用的是Spring,那么在Spring XML布线文件中配置密码规则对象非常简单。这使您可以在不更改代码的情况下调整规则。)
答案 1 :(得分:0)
密码正则表达式
((?=.*\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
答案 2 :(得分:0)
您的模式使用XML文档中禁止的字符。 为简单起见,将密码放入CDATA。
答案 3 :(得分:0)
尝试一下
^.\*(\?:.{6,20})(\?:.\*[a-z].\*[a-z])(\?:.\*[A-Z])(\?:.\*[0-9]).\*$