我正在尝试使用以下正则表达式验证Java中的String以查看它是否与randomUUID格式匹配
^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$
现在这样可以正常工作并获取无效字符串等等 - 但是,如果我将空字符串传递给正则表达式,它将返回true,因此当我对Pattern注释执行验证时,不会报告任何约束违规。这是预期的行为,因为String为null,它没有执行任何验证吗?
作为解决这个问题的方法,在我使用Pattern注释注释的getter方法中,我使用了这个
return id != null ? id : "null"
这是有效的,但对我来说似乎有点...... hacky:)
答案 0 :(得分:3)
如果要排除空值,请使用a 'not null' annotation,例如@NotNull
。
如果参数为true
(一个奇怪的选择,恕我直言),PatternValidator返回null
;它在消息来源中如此说得对。我见过不同的版本,他们都这样做了,所以它确实是合同的一部分(应该更好地记录)。
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
if ( value == null ) {
return true;
}
Matcher m = pattern.matcher( value );
return m.matches();
}