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