[英]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.