对可能为空或必须有 n 位的字符串进行 JAX-RS 验证

JAX-RS validation for string which may be empty or must have n digits

我正在使用 javax.validation.constratins 中的 Pattern 验证来验证字段。字符串:

我设法验证了七位数字,但我不知道如何进一步验证此字段是否为空。

@Getter
@Setter
public class MyRestRequest {

  @Pattern(regexp = "\d{7}")
  private String someString;

}

因为 Pattern null 被认为是有效的,问题归结为构造匹配空字符串或七位数字的正则表达式。通常对于空字符串,使用 ^$(行首和行尾)。

在这种情况下,^|\d{7}$|\d{7} 甚至 |\d{7} 也可以,但 ^$|\d{7} 更典型:

@Pattern(regexp = "^$|\d{7}")
public String someString;