java可以使用正则表达式来判定输入的是否为手机或电话号码,Java中的正则表达式模式始终是验证用户电话号码的最佳方法。
首先声明 String 类型的 regex 变量,它是用于验证电话号码的表达式。代码如下:
String regex="0\\d{2,3}[-]?\\d{7,8}|0\\d{2,3}\\s?\\d{7,8}|1[0-9][0-9]\\d{8}";
电话号码包括固定电话和手机号码。
其中固定电话是由区号和号码组成,区号是以 0 开头的,后面是 2-3 位数,因此在匹配区号的时候可以使用正则表达式 0\d{2,3},固定电话号码由 7~8 位数字组成,因此可以使用表达式 \d{7,8} 来进行匹配。固定电话的组合方式可能是“区号-号码”或者是“区号号码”,因此匹配固定电话号码时,可以使用“0\d{2,3}[-]?\d{7,8}|0\d{2,3}\s?\d{7,8}” 表达式。
手机号码是 11 位数,并且以数字 1 开头。现在的电话号码种类繁多,博主并没有仔细查询,这里使用“1[3-9][0-9]\d{8}”表达式进行匹配。请自行查询目前手机号码的格式。
此时,可以判断输入的是否为手机或电话号,但无法进行
单一的分辨,可将代码拆分:
String regex1="0\\d{2,3}[-]?\\d{7,8}|0\\d{2,3}\\s?\\d{7,8}";
String regex2="1[3-9][0-9]\\d{8}";
进行输入号码的匹配与判断:
Pattern pattern1=Pattern.compile(regex1);
Pattern pattern2=Pattern.compile(regex2);
Matcher matcher1=pattern1.matcher(phone);
Matcher matcher2=pattern2.matcher(phone);
boolean boo1=matcher1.matches();
boolean boo2=matcher2.matches();
详细代码如下:
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PhoneNumber{
public static void main(String args[]){
String regex1="0\\d{2,3}[-]?\\d{7,8}|0\\d{2,3}\\s?\\d{7,8}";
String regex2="1[3-9][0-9]\\d{8}";
Scanner scan=new Scanner(System.in);
String answer;
do{
System.out.println("请输入您的号码: ");
String phone=scan.next();
//定义Pattern对象
Pattern pattern1=Pattern.compile(regex1);
Pattern pattern2=Pattern.compile(regex2);
//匹配对象
Matcher matcher1=pattern1.matcher(phone);
Matcher matcher2=pattern2.matcher(phone);
//bool函数判断输入是否正确
boolean boo1=matcher1.matches();
boolean boo2=matcher2.matches();
if(boo1)
System.out.println("您输入的是电话号码:\n"+phone);
else if(boo2)
System.out.println("您输入的是手机号码:\n"+phone);
else
System.out.println("格式错误:\n");
System.out.println("是否重新输入?(Y/N)");
answer=scan.next();
}while(answer.equalsIgnoreCase("Y"));
}
}
运行如下:
代码中有一处要特别注意,answer函数的定义在外,以免有些编译器的报错。