[1-9]\\d{2}-[1-9]\\d{2}-\\d{4}
[1-9]有什么作用?就像特定范围的整数? 我试过194-333-1111但没有验证。
这是一个微不足道的问题,但花了我一个小时仍然无法弄清楚。
任何帮助表示赞赏!感谢
修改
if (phone.matches("[1-9]\\d{2}-[1-9]\\d{2}-\\d{4}"))
System.out.println("Invalid phone number");
else
System.out.println("Valid input. Thank you.");
答案 0 :(得分:3)
[1-9]
与1
和9
之间的字符范围匹配。
您在哪里测试表达式,因为它与您的目标字符串匹配。但是,斜杠是转义的,因为它们在输入时可能需要编程语言。您可以使用将为您进行转义的应用程序测试表达式。
代码编辑:
您的错误消息已被撤消。当字符串有效时,matches()
返回true,但是在if else语句的真实部分中打印它是无效的。
答案 1 :(得分:2)
以下是正则表达式的解体:
[1-9] // Starts with a digit other than 0
\d{2} // and followed by any two digits
- // and followed by -
[1-9] // and followed a digit other than 0
\d{2} // and followed by any two digits
- // and followed by -
\d{4} // and followed by any four digits
194-333-1111与上述正则表达式匹配。问题可能在于逃避角色。
e.g:
public static void RegexTest()
{
Pattern p = Pattern.compile("[1-9]\\d{2}-[1-9]\\d{2}-\\d{4}");
Matcher m = p.matcher("194-333-1111");
boolean b = m.matches();
System.out.println(b);
}
答案 2 :(得分:1)
[1-9]
匹配从1到9开始的任何数字
除非您将\\d
表示为\d
并且与您给出的数字不匹配,否则给定的正则表达式肯定是错误的。如果你能说出你想要匹配的数字格式,我们可以提供更好的正则表达式。
答案 3 :(得分:1)
正如你所写的那样,正则表达式可能无法达到你想要的效果。你需要首先解开反斜杠。例如,在Perl中,您可以使用它:
if ($number =~ /[1-9]\d{2}-[1-9]\d{2}-\d{4}/) {
print "matches!\n";
}
然后您的正则表达式将按如下方式分解:
/[1-9] # Match exactly one of the numbers 1 through 9
\d{2} # Match exactly two digits
- # Match exactly one dash
[1-9] # Match exactly one of the numbers 1 through 9
\d{2} # Match exactly two digits
- # Match exactly one dash
\d{4} # Match exactly four digits
/x
编辑:为了向您展示目前的正则表达式如何运作,以下是其细分:
/[1-9] # Match exactly one of the numbers 1 through 9
\\ # Match exactly one \
d{2} # Match exactly two 'd's
- # Match exactly one dash
[1-9] # Match exactly one of the numbers 1 through 9
\\ # Match exactly one \
d{2} # Match exactly two 'd's
- # Match exactly one dash
\\ # Match exactly one \
d{4} # Match exactly four 'd's
/x
看看双反斜杠有多大区别?
答案 4 :(得分:1)
如果您可以依赖其他库,我建议您使用Google的libphonenumber开源库来验证您的电话号码。它也有验证支持。