【问题标题】:Regex contains one or more phone number正则表达式包含一个或多个电话号码
【发布时间】:2017-03-01 18:11:28
【问题描述】:

我需要一个正则表达式来匹配一个或多个可以用分号分隔的电话号码 (;),并且号码长度可以是 7 个或更多字符 0-9+-、@ 987654327@.

如下:

1234567
1234567;1234567
1234567;+0591234567
1234567777;1234567777;1234567891

我尝试了以下正则表达式,但失败了:

^[0-9.-_+]{7,}(;[0-9.-_+]{7,})*$

【问题讨论】:

标签: java php regex


【解决方案1】:

这几乎是正确的,只是您需要在正则表达式中使用的字符之前使用 \(反斜杠)。试试看-

^[0-9.\-_+]{7,}(;[0-9.\-_+]{7,})*$

更新:

比以前更完美-

(?<=\;|\A)[\+\-\_]?\d{7,}(?=\;|\Z)

你可以试试here。归功于 @sudoman 的评论。

【讨论】:

  • 只有-[..] 中是特殊的,因为它可以用来创建像a-z 这样的字符范围。我们不需要在那里逃避.+
  • 如果-是最后一个字符,你不需要转义
  • '+' 字符在正则表达式中用作 1 到 INF 重复,'-' 用于提及范围,'.'用于提及任何字符。所以你需要逃脱它们。
  • [a+] 表示 a+ 字符,而不是 a aa aaa 因为 [...] 可以匹配指定字符集中的单个字符。我们允许[...] 中使用\+(我不喜欢它,因为它只会造成像这样的混乱)但这并不意味着\必需的.
  • 考虑访问regular-expressions.info/charclass.html#special 以获取有关[...] 元字符的更多信息。
猜你喜欢
  • 1970-01-01
  • 2017-09-23
  • 2014-02-15
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 2019-04-29
  • 2016-02-02
相关资源
最近更新 更多