繁体   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