字符串中的任何位置都不应包含 9 位数字。它可以包含 8 位或 10 位或 9 位以外的任何数字。
有效 - 12345678、1234567891、12345678
无效 - 123456789、123456789
Regex - "^(?!(^|.*\\D)\\d{9}(\\D|$)).*|^(?!(^|.*\\D)\\d{16}(\\D|$)).*";
不允许 10 位字符
试试这个:
if (input.matches("^(?!(^|.*\\D)\\d{9}(\\D|$)).*")) {
// the input does not contain a 9-digit number
}
这个正则表达式
/^(\D*|\d{1,8}(\D|$)|\d{10,})*$/
或在字符串中(加倍\
)
/^(\\D*|\\d{1,8}(\\D|$)|\\d{10,})*$/
处理重复的序列
这似乎有效:
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>