字段上的休眠正则表达式验证不起作用

sil*_*box 4 java spring hibernate-validator

我有一个简单的正则表达式,它应该只匹配字符串的最后 4 个字符中的字母和数字:

([a-zA-Z0-9]{4}$)
Run Code Online (Sandbox Code Playgroud)

它在在线测试器中完美运行,但如果我将它与字段上的休眠验证注释一起使用,则不匹配:

@NotNull
@Length(min = 4, max = 25)
@Pattern(regexp = "([a-zA-Z0-9]{4}$)")
private String test;
Run Code Online (Sandbox Code Playgroud)

例如,它为1234.5678-abC2字符串返回 false

你可以帮帮我吗?

tma*_*wen 5

对于未来的访问者,我会在主要 OP 评论中添加@hofan41 的回复。

您假设@Pattern如果子字符串正则表达式匹配通过,注释将返回 true。如果它不起作用,那么您的假设可能不正确。尝试在模式字符串的开头添加.*

以这种方式,bean 属性验证注释将如下所示:

@NotNull
@Length(min = 4, max = 25)
@Pattern(regexp = ".*([a-zA-Z0-9]{4}$)")
private String test;
Run Code Online (Sandbox Code Playgroud)


Ste*_*ers 5

该模式与整个区域匹配,如以下PatternValidator代码所示:

public boolean isValid(CharSequence value, ConstraintValidatorContext constraintValidatorContext) {
    if ( value == null ) {
        return true;
    }
    Matcher m = pattern.matcher( value );
    return m.matches();
}
Run Code Online (Sandbox Code Playgroud)

...以及来自Matcher.matches的文档:

尝试将整个区域与模式进行匹配。