使用正则表达式从字符串中提取电话号码?

sta*_*ith 2 ruby regex ruby-on-rails ruby-on-rails-3

我需要从rails中的大字符串中提取一些电话号码.这些号码将以多种格式出现,并且可以在一个字符串中包含多个电话号码.

以下是发生的格式类型的示例:

  • 022 1234567
  • 021 123 2345
  • 0271233211
  • 021-233-9123
  • 09 123 32112
  • 021 2331231或021 321123123

提取出现在文本正文中的电话号码的最有效方法是什么?

更新:谢谢你的答案.在对其中一些进行测试后,我意识到我应该包含更多示例.以下列表中未显示以下内容:

  • 622 32281
  • 5754321
  • 092213212
  • (09)1234321

And*_*y G 6

我会保持简单:

\d{2}[\s\d-]+
Run Code Online (Sandbox Code Playgroud)

两个数字,一个或多个空格,数字或连字符.

需要更多字符:

\d{2}[\s\d-]{5,}
Run Code Online (Sandbox Code Playgroud)

(两个数字和5个或更多的空格,连字符的数量),这将减少错误命中的数量.

这些将包括电话号码后面的额外空格,但结果可能会被修剪.

但是,我会删除连字符和空格,并计算剩余的数字,以将它们识别为电话号码,而不是修剪.

如果电话号码始终以0开头:

0\d[\s\d-]{5,}\d
Run Code Online (Sandbox Code Playgroud)

这以一个数字结束,因此在前面的示例中最后删除了空格.

添加以下进一步的示例:

\b[\s()\d-]{6,}\d\b
Run Code Online (Sandbox Code Playgroud)