我正在尝试匹配电话号码模式,例如 - :
1234567890
123-456-7890
123.456.7890
123 456 7890
此代码适用于前三种模式。当我尝试使用\\s
处理空间时,它会抛出一个运行时异常 - :
Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal character range near index 12
\A\d{3}([.-\s]?)\d{3}\1\d{4}\Z
^
at java.util.regex.Pattern.error(Pattern.java:1924)
at java.util.regex.Pattern.range(Pattern.java:2594)
at java.util.regex.Pattern.clazz(Pattern.java:2507)
at java.util.regex.Pattern.sequence(Pattern.java:2030)
at java.util.regex.Pattern.expr(Pattern.java:1964)
at java.util.regex.Pattern.group0(Pattern.java:2854)
at java.util.regex.Pattern.sequence(Pattern.java:2018)
at java.util.regex.Pattern.expr(Pattern.java:1964)
at java.util.regex.Pattern.compile(Pattern.java:1665)
at java.util.regex.Pattern.<init>(Pattern.java:1337)
at java.util.regex.Pattern.compile(Pattern.java:1022)
at Regex13.main(Regex13.java:11)
我还尝试过unicode pattern \ u0020和十六进制模式\ 0x20,但仍然没有用。
//validating phone numbers
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regex13
{
public static void main(String ...arg)
{
System.out.println("Enter phone number:");
String phoneNumber=new java.util.Scanner(System.in).next();
String patt="\\A\\d{3}([.-\\s]?)\\d{3}\\1\\d{4}\\Z";
Pattern p=Pattern.compile(patt);
Matcher m=p.matcher(phoneNumber);
if(m.find())
System.out.println("Valid phone number!!");
else
System.out.println("Invalid phone number!!");
}
}
这可能是什么解决办法?
答案 0 :(得分:2)
实际上问题在于其他地方。解析器将[.-\\s]
解释为范围。例如[a-z]
也是如此,但第一个无效。只需重新排序[-.\\s]