现在
正在处理一个项目,其中有大量的文本字符串,我们必须本地化电话号码并使其可点击用于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
也许是这样的:
/('+'d+)?'s*('('d+'))?(['s-]?'d+)+/
-
('+'d+)?
= "+"后跟一个或多个数字(可选) -
's*
= 任意数量的空格字符(可选) -
('('d+'))?
= "("后跟一个或多个数字,后跟")"(可选) -
(['s-]?'d+)+
= 一组或多组数字,可选在前面加上空格或短划线
不过,说实话,我怀疑你会找到一个单一的表达来统治所有人。 电话号码可以采用许多不同的格式,因此匹配任何可能的格式并且没有误报或误报可能是不切实际的。
不确定是否有用于此的库。 嗯。与任何国际设施一样,电话号码是标准化的,也应该有一种定义电话号码的格式。E.164 建议推荐的电话号码:http://en.wikipedia.org/wiki/E.164 。所有开源解码库都是通过读取这些标准格式构建的,所以如果你真的找不到任何现有的库,它应该会有所帮助
我想这可能适用于这些情况?
preg_replace("/('+?['d-'(')'s]{7,}?'d)/", '<a href="tel:$1">number</a>', $str);
基本上,我检查它是否可以从+开始。不必如此。然后我检查它是否有数字、-、(、) 和至少 8 个案例的空格,这样它就不会选择低的非电话号码。
尝试以下操作:
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);