正则表达式不允许字符串中的9位数字

时间:2013-02-01 00:27:16

标签: java regex

字符串不应包含字符串中任何位置的9位数字。它可以包含8位数字或10位数字或9位以外的任何数字。

有效 - 12345678,1234567891,a 12345678
无效 - 123456789,123456789 a

Regex - "^(?!(^|.*\\D)\\d{9}(\\D|$)).*|^(?!(^|.*\\D)\\d{16}(\\D|$)).*"; 

不允许使用10位数字

3 个答案:

答案 0 :(得分:2)

试试这个:

if (input.matches("^(?!(^|.*\\D)\\d{9}(\\D|$)).*")) {
    // the input does not contain a 9-digit number
}

答案 1 :(得分:2)

这个正则表达式

/^(\D*|\d{1,8}(\D|$)|\d{10,})*$/

或以字符串形式(加倍\

/^(\\D*|\\d{1,8}(\\D|$)|\\d{10,})*$/

负责重复序列

答案 2 :(得分:1)

这似乎有效:

bsh % pp = java.util.regex.Pattern.compile(
  "(^|\\D)+(\\d{10,2147483647}|\\d{0,8})(\\D+|$)((\\d{10,2147483647}|\\d{0,8})(\\D+|$))*");

bsh % mm = pp.matcher(".1234567890 1234567890.").matches();
<true>
bsh % mm = pp.matcher(".1234567890 123456789.").matches();
<false>
bsh % mm = pp.matcher(".123456789 123456789.").matches();
<false>
bsh % mm = pp.matcher(".123456789 12345678.").matches();
<false>
bsh % mm = pp.matcher(".12345678 12345678.").matches();
<true>
bsh % mm = pp.matcher("123456789 12345678.").matches();
<false>
bsh % mm = pp.matcher("12345678 12345678.").matches();
<true>
bsh % mm = pp.matcher("12345678 123456789").matches();
<false>
bsh % mm = pp.matcher("12345678 12345678").matches();
<true>

使用问题中的字符串:

bsh % mm = pp.matcher("12345678, 1234567891, a 12345678").matches();
<true>
bsh % mm = pp.matcher("123456789, 123456789 a").matches();
<false>