【问题标题】:Validation of null against Regex针对 Regex 验证 null
【发布时间】:2013-11-08 20:13:23
【问题描述】:

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

【问题讨论】:

  • 标准 Java 没有 Pattern 注释,只有类。你在使用一些框架吗?
  • 我想传递一个空字符串会产生一个 NullPointerException。你能在你实际应用模式的地方添加代码吗?
  • 我正在使用 Hibernate 注释,据我所知,当 null 被传递时,没有执行正则表达式检查,所以我认为这是我的代码出了问题!
  • Hibernate 有模式注解
  • @SCassidy1986 查看我的更新答案。

标签: java regex annotations


【解决方案1】:

如果要排除空值,请使用a 'not null' annotation,例如@NotNull


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

public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
    if ( value == null ) {
        return true;
    }
    Matcher m = pattern.matcher( value );
    return m.matches();
}

【讨论】:

  • 是的,很奇怪,虽然我可以理解技术上 null 不等于模式...
猜你喜欢
  • 1970-01-01
  • 2012-11-27
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 2012-07-09
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多