【问题标题】:Regular Expression to match a string of numbers including special characters正则表达式匹配一串数字,包括特殊字符
【发布时间】:2013-10-02 01:21:54
【问题描述】:

我需要一个正则表达式来匹配一串数字,但是这个字符串可以包含一些特殊字符,例如.-+。这是能够检测文本中的电话号码并将其删除所必需的。

我用的表达方式

/^(.*)([\d\(\)\-\_\.\+\ ]{10,30})(.*)$/im

这样做,但这也匹配仅包含 10 个空格的字符串。

如何编辑此表达式以确保它包含至少 10 位数字?

【问题讨论】:

  • 但是(.*)的开头和结尾将匹配任何字符。您能否发布一个输入样本,说明您拥有的确切内容以及需要匹配的内容?
  • 这取决于您运行正则表达式的工具、应用程序或语言是否支持环视 - 请添加一个代表它的标签
  • 请参阅我对当今大多数正则表达式应支持的答案的回答-尽管不是 POSIX-我认为您必须扩展所有字符类,但是由于您使用的是 @ 987654327@ 在您的问题中,这可能是 N/A

标签: regex


【解决方案1】:

你可以使用这样的模式:

([-()_.+ ]*\d[-()_.+ ]*){10,}

这将匹配由任意数量的特殊字符包围的数字,这些字符必须至少重复 10 次。

【讨论】:

  • 这个正则表达式也匹配带有字母的字符串。它应该只匹配带有数字和特殊字符的字符串
  • @HaniGoc 它只会匹配数字和那些指定的特殊字符。它将匹配大部分文本中的模式,例如从字符串中,"Phone: (123) 456-7890" 将匹配 ": (123) 456-7890"
【解决方案2】:

您可以使用积极的前瞻:

/^(?=.*?\d{10,})(.*?)([-\d()_.+\s]{10,30})(.*)$/im 

【讨论】:

  • 这将只匹配 包含 10 个连续数字的字符串。我认为这不是 OP 想要的。电话号码很少这样写。见en.wikipedia.org/wiki/…
  • @p.s.w.g 问题很模糊,只有当你发表评论时我才知道这个电话号码的要求。
【解决方案3】:

我过去用过这样的东西:

/1?[2-9]\D*\d\D*\d[^2-9]*[2-9](\D*\d[^02-9]*[02-9]|[^02-9]*[02-9]\D*\d)\D*\d\D*\d\D*\d\D*\d/

对于初学者来说可能很难解码,但它匹配 10 个(如果以 1 开头,则为 11 个)数字,符合大多数(我认为是全部)NANP 标准,并且允许数字之间的任何文本

如果您只想允许.-+,那么你将用[.-+]替换每个\D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-28
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 2020-06-30
    相关资源
    最近更新 更多