近日收到客戶提的需求,想把字符串中的電話號碼提取出來,讓用戶看到時可以直接撥打電話。
遂想到了用正則提取,然后再進行替換,加上超鏈接。
特此記錄提取方法,備忘。
以下是提取電話的代碼,兼容11位手機號、3位或4位區(qū)號+8位電話號、400電話的兩種寫法(400-ddd-dddd、400ddddddd)。如有其他格式的電話號碼需要提取,請自行添加正則規(guī)則。
/// <summary>
/// 提取字符串中的電話號
/// * 兼容11位手機號、3位或4位區(qū)號+8位電話號、400電話的兩種寫法(400-ddd-dddd、400ddddddd)
/// </summary>
/// <param name="input">輸入的字符串</param>
/// <returns></returns>
public static List<string> GetTelephoneList(string input)
{
//集合存放提取出來的電話號碼
List<string> list = new List<string>();
/*
* 正則表達式提取
* 分為五種格式,能兼容11位手機號、3位或4位區(qū)號-7位或8位電話號、400電話的兩種寫法(400-ddd-dddd、400ddddddd)
*/
Regex regex = new Regex(@"(1[3|4|5|6|7|8|9]\d{9})|(0\d{2,3}-\d{7,8})|(400-\d{3}-\d{4})|(400\d{7})");
//Match集合,匹配成功的字符串集合
MatchCollection collection = regex.Matches(input);
//遍歷Match集合,取出值
string telephone;
foreach (Match item in collection)
{
foreach (Group group in item.Groups)
{
telephone = group.Value.Trim();
//偶爾會出現(xiàn)重復提取,所以加了去重判斷
if (!string.IsNullOrEmpty(telephone) && !list.Contains(telephone))
{
list.Add(telephone);
}
}
}
return list;
}