我有一个文本框接受带有(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
建议我任何其他正则表达式都有用吗?
答案 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
。)