簡體   English   中英

C# - 使用正則表達式驗證電話號碼

[英]C# - Validating phone numbers using regex

我解決了以下問題 a 決定使用正則表達式,但我有點迷茫。

任務:根據以下條件進行正則表達式驗證電話號碼 - 正確的格式是:+xxx xxx xxx xxx, (xxx) xxx xxx xxx, xxx xxx xxx, xxxxxxxxx, +xxxxxxxxxxxx。

我試過了:

if(pnumber.Lenght>=9 && pnumber.Lenght<=18)
{
if(Regex.Match(pnumber, @"^(?[\+][1-9]{1}[0-9]{0,2}\s)?(?[1-9]\d{0,4})(?\s[1-9][\d]{5,12})(?\sx\d{0,4})?$").Success){
Console.WriteLine(pnumber);
}
else {
Console.WriteLine(@$"error");
}
}```

*just example 

Thanks for help.

擁有一系列模式,例如

+xxx xxx xxx xxx, 
(xxx) xxx xxx xxx, 
xxx xxx xxx, 
xxxxxxxxx, 
+xxxxxxxxxxxx

我們可以借助正則表達式Linq將它們組合成一個則表達式

using System.Linq;
using System.Text.RegularExpressions;

...

private static string MakeRegex(params string[] patterns) {
  static string SinglePattern(string pattern) => "(?:^" + string.Concat(Regex
    .Split(pattern, "(x+)")
    .Select(item => item.StartsWith('x')
       ? $"[0-9]{{{item.Length}}}"
       : string.Concat(item.Select(c => Regex.Escape(c.ToString()))))) + "$)";

  return string.Join("|", patterns.Select(pattern => SinglePattern(pattern))); 
}

用法

string phonePattern = MakeRegex(
  // Add / Edit / Remove patterns, if required  
  "+xxx xxx xxx xxx", 
  "(xxx) xxx xxx xxx", 
  "xxx xxx xxx", 
  "xxxxxxxxx", 
  "+xxxxxxxxxxxx"
);

...

if (Regex.IsMatch(pnumber, phonePattern)) {
  ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM