2

现在正在处理一个项目,我们有大量的文本字符串,我们必须本地化电话号码并使其可用于 Android 手机。

电话号码可以有不同的格式,前后有不同的文字。有什么简单的方法可以检测各种电话号码格式吗?一些可以使用的库?

电话号码可以显示,必须与所有这些组合一起使用。所以结果就像

<a href="tel:number">number</a>

+61 8 9000 7911

+2783 207 5008

+82-2-806-0001

+56 (2) 509 69 00

+44 (0)1625 500125

+1 (305)409 0703

031-704 98 00

+46 31 708 50 60

4

4 回答 4

2

也许是这样的:

/(\+\d+)?\s*(\(\d+\))?([\s-]?\d+)+/
  • (\+\d+)?= 一个“+”后跟一位或多位数字(可选)
  • \s*= 任意数量的空格字符(可选)
  • (\(\d+\))?= A "(" 后跟一个或多个数字,后跟 ")"(可选)
  • ([\s-]?\d+)+= 一组或多组数字,前面可选空格或破折号

不过,老实说,我怀疑你会找到一种可以统治所有人的表达方式。电话号码可以有多种不同的格式,以至于要匹配任何可能的格式而没有误报或否定可能是不切实际的。

于 2012-04-13T13:16:52.587 回答
1

不确定是否有一个图书馆。嗯。像任何国际设施一样,电话号码是标准化的,并且也应该有一种定义电话号码的格式。E.164 建议推荐的电话号码:http ://en.wikipedia.org/wiki/E.164 。所有开源解码库都是通过阅读这些标准格式构建的,所以如果你真的找不到任何现有的库,它应该会有所帮助

于 2012-04-13T13:14:12.490 回答
0

尝试以下操作:

preg_match_all('/\+?[0-9][\d-\()-\s+]{5,12}[1-9]/', $text, $matches);

或者:

preg_match_all('/(\+?[\d-\(\)\s]{8,20}[0-9]?\d)/', $text, $matches);
于 2014-03-25T15:21:08.067 回答
0

我想这可能适用于这些情况?

preg_replace("/(\+?[\d-\(\)\s]{7,}?\d)/", '<a href="tel:$1">number</a>', $str);

基本上我检查它是否可以从+开始。它不必。然后我检查它是否有数字、-、(、) 和至少 8 个案例的空格,这样它就不会选择低的非电话号码。

于 2012-04-13T13:10:54.860 回答