有没有办法使用正则表达式排除以 11 结尾的 3 位数字?
Is there a way to exclude 3 digit numbers ending in 11 using regular expressions?
我正在尝试验证 phone 号码区号 (北美),检查号码是否以 1 或 0 开头。此外,该号码不应包括诸如此类的保留号码(即不包括以 11 结尾的所有号码)。
- 这些是有效的区号:414、608、920、319、715
- 这些号码无效:023、123、411、611、811、911
我已经尝试了好几种方法,但还是没有成功。我不太擅长正则表达式。这是我最近的尝试
\b([2-9](?!11)|[2-9][0-9]{2})\b
您的尝试非常接近,您的匹配条件中不需要 "either" 表达式,只是一个否定的前瞻,如果它看到字符串,它将停止匹配。这是一些工作正则表达式的示例:
([2-9](?!11)[0-9]{2})
你可以试试here
没有负前瞻的解决方案:
([2-9][02-9][0-9]|[2-9][0-9][02-9])
这应该按要求工作,包括 0 和 1 警告。
String pat = "[2-9]\d{2}(?<!11)";
String[] data = {"123","001","212", "321", "449","811", "121", "111", "911", "099"};
for (String s : data ) {
System.out.println(s + " " + (s.matches(pat) ? "valid" : "invalid" ));
}
版画
123 invalid
001 invalid
212 valid
321 valid
449 valid
811 invalid
121 invalid
111 invalid
911 invalid
099 invalid
我正在尝试验证 phone 号码区号 (北美),检查号码是否以 1 或 0 开头。此外,该号码不应包括诸如此类的保留号码(即不包括以 11 结尾的所有号码)。
- 这些是有效的区号:414、608、920、319、715
- 这些号码无效:023、123、411、611、811、911
我已经尝试了好几种方法,但还是没有成功。我不太擅长正则表达式。这是我最近的尝试
\b([2-9](?!11)|[2-9][0-9]{2})\b
您的尝试非常接近,您的匹配条件中不需要 "either" 表达式,只是一个否定的前瞻,如果它看到字符串,它将停止匹配。这是一些工作正则表达式的示例:
([2-9](?!11)[0-9]{2})
你可以试试here
没有负前瞻的解决方案:
([2-9][02-9][0-9]|[2-9][0-9][02-9])
这应该按要求工作,包括 0 和 1 警告。
String pat = "[2-9]\d{2}(?<!11)";
String[] data = {"123","001","212", "321", "449","811", "121", "111", "911", "099"};
for (String s : data ) {
System.out.println(s + " " + (s.matches(pat) ? "valid" : "invalid" ));
}
版画
123 invalid
001 invalid
212 valid
321 valid
449 valid
811 invalid
121 invalid
111 invalid
911 invalid
099 invalid