带有“ - ”符号的指定格式数的正则表达式

时间:2016-09-14 10:30:31

标签: java regex validation

我有一个文本框接受带有(12个字符)的数字,如下面的四种格式

12345-1234-12
1234-1234-12
12345-123-12
12345-1234-1

我试过这个正则表达式

  "(\\d{4,5}-\\d{3,4}-\\d{1,2})"

但它也接受以下格式,这不是我的要求,我不希望以下格式接受

1234-123-1
1234-1234-1

建议我任何其他正则表达式都有用吗?

1 个答案:

答案 0 :(得分:2)

使用正面的lookbehind,您还可以检查不同的约束。 E.g。

^(\d{4,5}-\d{3,4}-\d{1,2})(?<=^.{12})

检查,从行首到(?<=^.{12})的字符串部分是否正好有12个字符。

Java示例:

Pattern p = Pattern.compile("^(\\d{4,5}-\\d{3,4}-\\d{1,2})(?<=^.{12})");
for (String s : new String[]{"12345-1234-12",
    "1234-1234-12",
    "12345-123-12",
    "12345-1234-1",
    "1234-123-1",
    "1234-1234-1"
}) {
    System.out.println(s);
    System.out.println(p.matcher(s).matches());
}

输出

12345-1234-12
false
1234-1234-12
true
12345-123-12
true
12345-1234-1
true
1234-123-1
false
1234-1234-1
false

如果一个包含13个字符的字符串也应匹配,则lookbehind可以更改为(?<=^.{12,13})。 (这将为第一个输入返回true。)