包含 x 或 y 位数的输入字符串的 Bean 验证正则表达式

Bean validation regex for an input string containing x or y number of digits

我想检查输入字符串是否包含 x 或 y 位数。我正在使用 JSR-303 bean 验证。可以检查吗?如果是,什么正则表达式是合适的?为了。例如。 “123dfn5657”或“34fdg8959413”如果针对“^(\d{7}|\d{9})$”之类的内容进行验证应该有效。

您可以使用 java.util.regex.Pattern javadoc 中描述的正则表达式语法。

在你的情况下,假设你想要定义 1、2 或 4 位数字(但不是 3 位)的输入,你可以使用这样的结构:

String[] samples = { 
    "1",
    "12",
    "1234",
    "123",
    "123a",
    "1a234",
    "a1234b",
    "a1bcd2e",
    "a1bcd2e3",
    "a1bde2e34"
};
for (String s: samples) {
    System.out.println(s + "\t" +
            java.util.regex.Pattern.matches("(([a-z]*\d){1}|([a-z]*\d){2}|([a-z]*\d){4})[a-z]*", s));
}

输出将是:

1         true
12        true
1234      true
123       false
123a      false
1a234     true
a1234b    true
a1bcd2e   true
a1bcd2e3  false
a1bde2e34 true

我建议使用 https://github.com/flexguse/validation-violation-checker 来测试你的 JSR303 注释 bean,这是一个小的 JUnit 插件。

如果您使用 Eclipse 作为 IDE 我推荐 QuickRex 插件 https://marketplace.eclipse.org/content/quickrex

使用这两个工具,您应该可以非常快速地反复试验来创建您的正则表达式,这可能是

[0-9]{1,}[a-z]{1,}[0-9]{1,}