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

时间:2010-12-08 10:53:48

标签: 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-pattern-valid:值'narendra1A'   对于。来说并不是一个有效的方面   图案   “^ *(\ = {6,20})(\ =。* [AZ]。* [AZ])(\ =。* [AZ])(\ =。* [0-9 ])。* $'代表类型   '#AnonType_passwordcreateUser'。

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

谢谢,

纳伦德拉

4 个答案:

答案 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]).\*$