我有以下问题:
User.groovy
类用户{
String userName
String passwd
static constraints = {
userName(nullable:false, maxSize:20)
passwd(password:true,
validator: {val, obj, errors->
if (!(obj.passwd.matches("(.*[\\d])"))) errors.rejectValue('passwd', 'noNumber')
if (!obj.passwd.matches("(.*[\\W])")) errors.rejectValue('passwd', 'noSpecialCh')
if (!obj.passwd.matches("(.*[a-z])")) errors.rejectValue('passwd', 'noLower')
if (!obj.passwd.matches("(.*[A-Z])")) errors.rejectValue('passwd', 'noUpper')
}
)
}
}
messages.properties
noNumber.racetrack.Users.passwd =密码应至少包含一个数字 noSpecialCh.racetrack.Users.passwd = password应包含至少一个特殊字符 noLower.racetrack.Users.passwd = password应包含至少一个小写字母 noUpper.racetrack.Users.passwd = password应包含至少一个大写字母
这些代码行给出了错误消息。
然而,
当我在密码中输入“1222s”时,它会给出错误消息: 密码至少应包含一个数字 密码应至少包含一个特殊字符 密码应至少包含一个大写字母
即使我输入了数字。
当我在密码中输入“sss1”时,它会给出错误消息: 密码应包含至少一个小写字母 密码应至少包含一个特殊字符 密码应至少包含一个大写字母
即使我已经进入了一些较低的案例。
好像它会检查最后一个字符并给出错误信息。
我在User.groovy或messages.properties中做错了什么?我的正则表达式错了吗?
请帮帮我。
答案 0 :(得分:0)
你的正则表达式错了。数字应为\d+
,特殊字符为\W+
,[a-z]+
等等。特殊符号用一个斜杠转义。 +
表示 - 一次或多次出现模式。无需.*
并与()
分组。