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