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

时间:2016-10-03 08:07:38

标签: java regex validation bean-validation

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

2 个答案:

答案 0 :(得分:1)

您可以使用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

答案 1 :(得分:0)

我建议使用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,}