0

我正在尝试使用以下正则表达式验证 Java 中的字符串以查看它是否与 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 :)

4

1 回答 1

3

如果要排除空值,请使用“非空”注释,例如@NotNull.


true如果参数是PatternValidator 返回null(一个奇怪的选择,恕我直言);它在源代码中这么说。我见过不同的版本,他们都这样做了,所以它确实是合同的一部分(并且应该更好地记录下来)。

public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
    if ( value == null ) {
        return true;
    }
    Matcher m = pattern.matcher( value );
    return m.matches();
}
于 2013-11-08T20:30:31.633 回答