带有电话号码的10位数手机号码的正则表达式

时间:2017-02-01 07:50:32

标签: c# regex

我想用电话号码为 10位数手机号码制作正则表达式。例子是

 9088534816
+91 33 40653155
 033-2647-0969

我想创建一个正则表达式,它可以匹配所有三种格式,如

 xxxxxxxxxx
+xx xx xxxxxxxx
 xxx-xxxx-xxxx 

格式。可以帮到我吗?我试过这个

\+?\d[\d -]{8,12}\d

但它也是这个号码12115351689385.这是我的问题

5 个答案:

答案 0 :(得分:6)

设计并测试每个模式 separtely

  Format            Pattern
 ------------------------------------------------- 
  xxxxxxxxxx       ^[0-9]{10}$
 +xx xx xxxxxxxx   ^\+[0-9]{2}\s+[0-9]{2}\s+[0-9]{8}$ 
  xxx-xxxx-xxxx    ^[0-9]{3}-[0-9]{4}-[0-9]{4}$
 ....

然后组合成最后一个:

 (pattern1)|(pattern2)|...|(patternN)

对于上面三种模式,组合模式是

 (^[0-9]{10}$)|(^\+[0-9]{2}\s+[0-9]{2}[0-9]{8}$)|(^[0-9]{3}-[0-9]{4}-[0-9]{4}$)

你可以实现这样的东西:

 //TODO: you may want to load the patterns supported from resource, file, settings etc.
 private static string[] m_Patterns = new string[] {
   @"^[0-9]{10}$",
   @"^\+[0-9]{2}\s+[0-9]{2}[0-9]{8}$",
   @"^[0-9]{3}-[0-9]{4}-[0-9]{4}$",
 };

 private static string MakeCombinedPattern() {
   return string.Join("|", m_Patterns
     .Select(item => "(" + item + ")"));
 }

试验:

string[] tests = new string[] {
  "9088534816",
  "+91 33 40653155",
  "033-2647-0969",
  "123",
  "12115351689385",
};

var result = string
  .Join(Environment.NewLine, tests
  .Select(test => 
     $"{test,18} {(Regex.IsMatch(test, MakeCombinedPattern()) ? "yes" : "no"),3}"));

Console.Write(result);

结果:

        9088534816 yes
   +91 33 40653155 yes
     033-2647-0969 yes
               123  no
    12115351689385  no

答案 1 :(得分:1)

首先简化输入字符串(以简化RegEx模式)

phones = phones.Replace(" ", "").Replace("-","");

现在只需找到数字......

var m = Regex.Matches(a, @"\+?[0-9]{10}");

答案 2 :(得分:0)

第一种和第三种格式(实际上大多数更常见的美国电话号码格式)可以合并为一种正则表达式模式:

^[(]?\d{3}[)]?[- ]?\d{3}[- ]?\d{4}$

第二种格式比较棘手,因为它是一个国际电话号码。不同的国家/地区具有不同的数字格式,因此解析起来不那么简单。如果您希望在示例中添加对特定国家/地区的支持,您也可以为其编写模式。您的具体示例如下:

^\+\d{2} \d{2} \d{8}$

(我不能像我做第一个模式那样对多个约定进行优化,因为我不熟悉那个电话号码格式。我不知道它是否允许破折号或是否有空格或可选或任何其他文化差异。)

在拥有所需的所有模式后,您可以将它们组合起来,就像Dmitry的回答建议String.Join一样,然后将结果用作Regex.Match / Regex.Matches调用的模式。

答案 3 :(得分:0)

对于伊朗手机号码,语法为^[0][9]\d{9}$

答案 4 :(得分:0)

有效电话号码的正则表达式

 public static bool IsPhoneNumberValid(this string phone)
  {
     bool isValid = false;
      if (!string.IsNullOrWhiteSpace(phone))
         {
       isValid = Regex.IsMatch(phone, @"\(?\d{3}\)?-? *\d{3}-? *-?\d{4}",
            RegexOptions.IgnoreCase);
         }
       
     return isValid;
        
    }