介紹一個之前用到的套件,因為工作問題,要處理很多不同國家的電話號碼
主要是東南亞,中國,還有台灣的電話號碼,光是東南亞就十個國家,我哪會知道每個國家(區域)的電話號碼是不是對的
所以今天來介紹一個 Google 開發的套件 libphonenumber,然後有開源大大把他轉成 C# 的套件

1. 使用 nuget 下載套件關鍵字 libphonenumber-csharp 然後安裝,基本上 porting 的套件不少
我的選擇原則就是最多人用,且支持 .NET 6 的,基本上我覺得其他用起來應該差異不大

2. 接下來就是判斷的部分這邊我放一些案例,主要會寫這一篇是因為,對方有可能會給一個
市內電話,他的確是那個國家的"合理"電話號碼,但是不是手機號碼
這樣我就不能夠寄送簡訊,所以我必須要判斷他是不是手機號碼
這邊我還多測試一些東西,你就看看是不是你要的,這邊我用瞎掰的一個手機電話,還有南投縣政府的市內電話來測試
var phoneNumberUtil = PhoneNumbers.PhoneNumberUtil.GetInstance();
//台灣電話號碼
var resultTaiwanNum1 = phoneNumberUtil.Parse("+886912345678", null);
//true
var resultTaiwanNum2 = phoneNumberUtil.Parse("+8860912345678", null);
//true
//瞎掰的電話
var resultTaiwanNum3 = phoneNumberUtil.Parse("+886712345678", null);
//false
//新北市政府電話
var resultTaiwanNum4 = phoneNumberUtil.Parse("+88602 2960 3456", null);
//true
//南投縣政府電話
var resultTaiwanNum5 = phoneNumberUtil.Parse("+88604 9222 2106", null);
//true
Console.WriteLine("Is Mobile:" + (phoneNumberUtil.GetNumberType(resultTaiwanNum2) == PhoneNumbers.PhoneNumberType.MOBILE).ToString());
Console.WriteLine("INTERNATIONAL:" + phoneNumberUtil.Format(resultTaiwanNum2, PhoneNumbers.PhoneNumberFormat.INTERNATIONAL));
Console.WriteLine("NATIONAL:" + phoneNumberUtil.Format(resultTaiwanNum2, PhoneNumbers.PhoneNumberFormat.NATIONAL));
Console.WriteLine("E164:" + phoneNumberUtil.Format(resultTaiwanNum2, PhoneNumbers.PhoneNumberFormat.E164));
Console.WriteLine("RFC3966:" + phoneNumberUtil.Format(resultTaiwanNum2, PhoneNumbers.PhoneNumberFormat.RFC3966));
//Is Mobile:True
//INTERNATIONAL:+886 912 345 678
//NATIONAL:0912 345 678
//E164:+886912345678
//RFC3966:tel:+886-912-345-678
Console.WriteLine("Is Mobile:"+ (phoneNumberUtil.GetNumberType(resultTaiwanNum5) == PhoneNumbers.PhoneNumberType.MOBILE).ToString());
Console.WriteLine("INTERNATIONAL:" + phoneNumberUtil.Format(resultTaiwanNum4, PhoneNumbers.PhoneNumberFormat.INTERNATIONAL));
Console.WriteLine("NATIONAL:" + phoneNumberUtil.Format(resultTaiwanNum4, PhoneNumbers.PhoneNumberFormat.NATIONAL));
Console.WriteLine("E164:" + phoneNumberUtil.Format(resultTaiwanNum4, PhoneNumbers.PhoneNumberFormat.E164));
Console.WriteLine("RFC3966:" + phoneNumberUtil.Format(resultTaiwanNum4, PhoneNumbers.PhoneNumberFormat.RFC3966));
//Is Mobile:False
//INTERNATIONAL:+886 2 2960 3456
//NATIONAL:02 2960 3456
//E164:+886229603456
//RFC3966:tel:+886-2-2960-3456
結果我就寫在 code 裡面了 ,特別感謝Roger 告訴我這套件還有 南投縣政府 的電話號碼
reference:
https://github.com/twcclegg/libphonenumber-csharp
https://www.nuget.org/packages/libphonenumber-csharp/
https://github.com/twcclegg/libphonenumber-csharp