在注冊會員是,經常需要輸入電話號碼,電話號碼是只手機號碼或者固定電話。如果輸入的內容不合法,則會向用戶輸出提士。本實例模擬實現電話號碼的驗證功能,接收用戶在控制台輸入的電話號碼,然后進行判斷,並將結果輸出。
在這里使用《Java正則表達式》一節中講到的正則表達式支持的字符來實現,步驟如下。
(1)創建名為Test21.java的Java文件,在main()方法中開始編寫代碼。
import java.until.Scanner;
import java.until.regex.Matcher;
import java.until.regex.Pattern;
public class Text21{
public static void main(String[] args){
//編寫代碼
}
}
(2)聲明String類型的regex變量,它是用於驗證電話號碼的表達式。代碼如下:
String regex = "0\\d{2,3}[-]?\\d{7,8}|0\\d{2,3}\\s?\\d{7,8}|13[0-9]\\d{8}|15[1089]\\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開頭。考慮到手機號碼的特殊性,這里使用"13[0-9]\\d{8}|15[1089]\\d{8}"表達式進行匹配。該正則表達式驗證13或15開頭的手機號碼;以15開頭的電話號碼,第3位數字只能是1,0,8,9中的一個。
(3)聲明String類型的answer變量,它表示是否繼續驗證電話號碼。代碼如下:
String answer = "Y";
(4)使用do...while語句進行操作,搜線解溲用戶在控制台輸入的電話號碼,然后利用Pattern進行編譯,接着創建給定輸入模式的匹配器,調用matches()方法返回匹配的結果。如果結果位true表示驗證通過,如果位false表示驗證失敗。代碼如下:
do{
System.out.print("請留下您的電話號碼");
Scanner scan = new Scanner(System.in);
String phone = scan.next(); //接收用戶在控制台輸入的電話號碼
Pattern pattern = Pattern.compile(regex);//編譯正則表達式
Matcher matcher = pattern.matcher(phone); //創建給定輸入模式的匹配器
boolean bool = matcher.matches();
if (bool){//如果驗證通過
System.out.println("輸入的電話號碼格式正確。");
}else{
System.out.println("輸入的電話號碼無效,格式不正確。");
}
System.out.print("是否繼續輸入?(Y/N或者y/n)");
answer = scan.next();
}
while(answer.\equalsIgnoreCase("Y"));
System.out.println("注冊結束。");
(5)運行代碼進行測試,如下所示:
請留下您的電話:18812345678 輸入的電話號碼無效,格式不正確。 是否繼續輸入?(Y/N或者y/n)y 請留下您的電話號碼:180112345678 輸入的電話號碼無效,格式不正確。 是否繼續輸入?(Y/N或者y/n)n 注冊結束。
請留下您的電話號碼:010-12345678 輸入的電話號碼格式正確。 是否繼續輸入?(Y/N或者y/n)y 輸入的電話號碼無效,格式不正確。 是否繼續輸入?(Y/N或者y/n)y 請留下您的電話號碼:0388-12345678 輸入的電話號碼格式正確。 是否繼續輸入?(Y/N或者y/n)n 注冊結束。
