针对Regex验证null

时间:2013-11-08 20:13:24

标签: java regex annotations

我正在尝试使用以下正则表达式验证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:)

1 个答案:

答案 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();
}