Javascript中的电话号码识别
Posted
技术标签:
【中文标题】Javascript中的电话号码识别【英文标题】:Phone Number Recognition in Javascript 【发布时间】:2011-02-17 22:11:24 【问题描述】:是否有可以识别网页中电话号码的 javascript 库?就像 Skype 在他们的 Firefox 插件上所做的那样。
或者你知道怎么做吗?网站或任何类似的教程都会非常有帮助。
非常感谢您的回复。
最好的,
【问题讨论】:
可以使用正则表达式来查找电话号码。一个非常基本的例子是/\d\d\d-\d\d\d-\d\d\d\d/
。但是你想用你找到的数字做什么?
我想将页面中的所有电话号码转换为链接。然后我会将它连接到我的应用程序中。单击链接时可能会显示一个弹出窗口。
您可以随时查看 Skype 是如何做到的。下载 FF 扩展名(.xpi 文件)然后解压缩它(.xpi 只是 .zip 的不同名称)并开始查看。我自己没有这样做,所以我不知道它是否容易找到,但值得一试。让我们知道您的发现!
【参考方案1】:
var makePhoneLinks = function()
var tNodes = [];
getTextNodes(document.body,false,tNodes,/(((\(\d3\) ?)|(\d3-))?\d3-\d4)/ig);
var l = tNodes.length;
while(l--)
wrapNode(tNodes[l],/(((\(\d3\) ?)|(\d3-))?\d3-\d4)/ig,"<a target='#'>$1</a>");
function getTextNodes(node, includeWhitespaceNodes,textNodes,match)
if (node.nodeType == 3)
if (includeWhitespaceNodes || !/^\s*$/.test(node.nodeValue))
if(match)
if(match.test(node.nodeValue))
textNodes.push(node);
else
textNodes.push(node);
else
for (var i = 0, len = node.childNodes.length; i < len; ++i)
getTextNodes(node.childNodes[i],includeWhitespaceNodes,textNodes,match);
function wrapNode(n,match,m)
var temp = document.createElement('div');
if(n.data)
temp.innerhtml = n.data.replace(match, m);
else
//whatever
while (temp.firstChild)
n.parentNode.insertBefore(temp.firstChild,n);
n.parentNode.removeChild(n);
【讨论】:
【参考方案2】:其他人可能有更好的方法来执行此操作,但这似乎为您提供了每个电话号码周围的链接。
我只是使用了我的简单正则表达式,因此您可能想要替换 Adam 提供的那个。
$(document).ready(function ()
$('*','body').each(function()
$(this).html( $(this).html().replace(/(\d\d\d-\d\d\d-\d\d\d\d)/g,'<a href="#">$1</a>') );
);
);
希望对你有帮助。
编辑:
这个版本可能也能正常工作,或者更好。
$(document).ready(function ()
$('body').html( $('body').html().replace(/(\d\d\d-\d\d\d-\d\d\d\d)/g,'<a href="#">$1</a>') );
);
我不知道是否有任何陷阱,但似乎可以使用一个相当简单的页面。
【讨论】:
【参考方案3】:要在字符串中查找匹配项,您需要使用regular expression。这个(虽然有点长)效果很好:
^(1\s*[-\/\.]?)?(\((\d3)\)|(\d3))\s*[-\/\.]?\s*(\d3)\s*[-\/\.]?\s*(\d4)\s*(([xX]|[eE][xX][tT])\.?\s*(\d+))*$
(找到here)
这将匹配“2405525009”、“1(240) 652-5009”和“240/752-5009 ext.55”,但不匹配“(2405525009”或“2 (240) 652-5009”。
要查找所有匹配项,您可能需要在while
循环中重复应用exec()
方法,如here 所示。
【讨论】:
感谢您的回复。是的,正则表达式几乎是工具,但我不希望我的页面上有任何输入框。我只想爬到页面并识别这些电话号码,然后将其转换为链接。以上是关于Javascript中的电话号码识别的主要内容,如果未能解决你的问题,请参考以下文章
html Html代码(普通javascript),可以跟踪Google Analytics中的电话号码点击次数