在grails中使用自定义验证时出现自定义错误消息的问题

时间:2015-08-23 10:45:59

标签: regex validation grails

我有以下问题:

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中做错了什么?我的正则表达式错了吗?

请帮帮我。

1 个答案:

答案 0 :(得分:0)

你的正则表达式错了。数字应为\d+,特殊字符为\W+[a-z]+等等。特殊符号用一个斜杠转义。 +表示 - 一次或多次出现模式。无需.*并与()分组。

相关问题