2012-01-26 107 views
1

我需要一些帮助,可以将电话号码转换为tel:links?将电话号码转换为电话号码的JavaScript:链接

我需要这段代码的一些事情:1)只在文本中查找数字,找不到位于标签属性中的数字。 2)一旦找到号码,将其包裹在tel:anchor中。 3)清理href属性的编号(删除任何不是数字的东西)。 4)希望工作速度非常快:)

使用jQuery很好,但我不确定这是否是最好的方法。

所以的JavaScript将改变的东西的页面这样所有实例:

<div data-something-that-looks-like-phone-number="(111) 222-3333"></div> 
(000) 000-0000 

要这样:

<div data-something-that-looks-like-phone-number="(111) 222-3333"></div> 
<a href="tel:0000000000"> (000) 000-0000</a> 

你会发现数据的东西,也就是说,看起来,喜欢 - 电话号码属性没有改变。

我有,似乎也用于搜索电话号码

[01]?[- .]?[\(\. ]?[2-9]\d{2}[\)\. ]?[- .]?\d{3}[- .]\d{4} 

让我开始将是非常赞赏的任何代码工作正则表达式。谢谢!

此外,之前也有类似的问题,解决方案是“不用担心,因为手机会自动执行此操作。”该解决方案对我们不起作用,即使在不自动执行此操作的设备上也需要电话链接。再次感谢......

回答

1

我不明白为什么你需要一个正则表达式,如果你有数据属性:

$("div[data-number]").each(function() { 
    var $a = $("<a />").attr("href", "tel:" + $(this).data("number")); 
    $a.html($(this).html()); 
    $(this).html($a); 
}); 

Demo.

+0

感谢您的代码,但是我只是编写了数据属性来显示我不想改变的一个例子(事后的一个不好的例子)。如果你在整个页面源代码中运行正则表达式,你会发现数据属性中的数字,但不应该改变......数据属性不会在实际使用中出现,但类似的数字可能在某处的标签中并应该留下... – MCM

+0

我编辑了这个问题,使我使用数据属性更清晰。 – MCM

0

我认为你正在寻找这样的事情。

var phoneRegEX = /([01]?[- .]?[\(\. ]?[2-9]\d{2}[\)\. ]?[- .]?\d{3}[- .]\d{4})/; 

$("div[data-number]").html(function(i, text) { 
    text = text.replace(phoneRegEX, "<a href='tel://$1'>$1</a>"); 
    return text; 
}); 

但是您正则表达式似乎有点有限

0

很老,但我会遇到这样的今天,找不到任何有效的解决办法,所以我写了这个正则表达式并将其添加为书签按钮。它弄乱了页面(css /图像),但允许您单击要拨打的号码。

javascript:document.body.innerHTML = document.body.innerHTML.replace(/((\d[\d\-.]*){9,})/g, '<a href="tel://$1">$1</a>'); 

它将匹配至少9个字符的数字。或者 -


我必须澄清,它只是想帮你在一些点击拨号,它不是一个完美的解决方案。

******更新******

OK,睡不着觉所以我创建的东西要好得多。现在你只需要点击它将转到电话链接的数字,然后像通常那样点击它。

javascript:document.addEventListener('click', function(e) { e = e || window.event; var target = e.target || e.srcElement; target.innerHTML = target.innerHTML.replace(/(([\d|\(][\d\-.\)\s]*){9,})/g, '<a _was_replaced="true" href="tel://$1">$1</a>'); if (!target.getAttribute("_was_replaced")) { e.preventDefault(); } }, true);