【问题标题】:Regex optional white space in phone number [duplicate]电话号码中的正则表达式可选空格[重复]
【发布时间】:2012-09-22 15:53:05
【问题描述】:

可能重复:
A comprehensive regex for phone number validation

我非常接近我需要的完整正则表达式。但是,我似乎无法获得允许的可选空白。

正则表达式

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

要求 - 只有这四个

111-111-1111 - 工作

(111)111-1111 - 作品

(111) 111-111 - 不捕获

1111111111 - 作品

如何在括号后添加可选空格?

【问题讨论】:

  • 我通常做的是去掉非数字字符,并确保长度为 10。然后我将 10 位字符串格式化为我认为它应该在数据库中的格式。
  • 我必须遵守仅针对所示 4 种格式的严格规则。
  • 转义括号?把括号括起来?为什么?对不起,但对我来说,这是一个丑陋的正则表达式。这是我的版本:/^[(]?\d{3}[)]?[-\s]?\d{3}-?\d{4}$/。您想要的部分是右括号后的[-\s]?,而不是\-?,无论如何,连字符不需要转义。

标签: c# regex


【解决方案1】:
^(\(?\d{3}\)*\s?\-?\d{3}\-?\d{4})$

*\s 表示 0 或 1 个空格字符。

编辑: 实际上,我更喜欢这个版本,因为它允许使用破折号或空格,但不能同时使用。还, ?表示 0 或 1,* 表示 0 或更多:

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

【讨论】:

  • 当使用derekslager.com/blog/posts/2007/09/… 时仍然无法捕获括号后有空格的那个?
  • 奇怪。我刚刚尝试过,它在您的链接上有效。这是我最初使用的工具:regexhero.net/tester
  • 是的,我只是重新输入了它们,并且有效。很奇怪,我不确定第一次发生了什么。
【解决方案2】:

\(?\b[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}\b3334445555333.444.5555333-444-5555333 444 5555(333) 444 5555 及其所有组合匹配怎么样。

更新

你遇到了 REGEX 的限制,所以丑陋的解决方案真的是:

(\d{3}-\d{3}-\d{4}|\(\d{3}\)\s?\d{3}-\d{4}|\d{10})

Example

【讨论】:

  • 我不能允许所有其他组合。只是我列出的那些。
  • 我认为这是不可能的,因为您希望在与破折号相同的位置允许一个空格,但前提是它位于一个 ) 之后,这也需要回顾另一个 (.
  • 您发布的第二个似乎效果很好。为什么你看起来这么反对它所有丑陋的谈话lol
  • 它基本上是说试试这个,如果它不起作用,试试这个,如果它不起作用试试这个......我个人的偏好是减少任何需要测试多个的复杂性找到匹配项的时间(不管实际使用、正则表达式、反射枚举等)。
  • 这是否会改变以在 javascript 中使用?例如: var re = new RegExp("(\d{3}-\d{3}-\d{4}|(\d{3})\s?\d{3}-\d{4}| \d{10})");有效 = re.test(value);
【解决方案3】:

有时最好匹配三个完整表达式之一:

^(\d{11}|(\d{3}-){2}\d4|\(\d{3}\) ?\d\d\d-\d\d\d)$

【讨论】:

    【解决方案4】:

    我不会根据格式来处理正则表达式,而是根据输入的数字来处理。这个问题给出了一个你应该采用的答案:

    A comprehensive regex for phone number validation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 2023-03-21
      • 2023-03-11
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      • 2011-08-27
      相关资源
      最近更新 更多