用Javascript替换页面上的电话号码

时间:2013-06-25 16:24:25

标签: javascript jquery regex

我正在尝试使用javascript替换html文档中特定电话号码的所有实例。

电话号码可能有多种形式:

888-888-8888

(888)-888-8888

(888)888-8888

http://jsfiddle.net/2ARgD/2/

$(document).ready(function(){
    function p(a,b,element){
        if(!element)element=document.body;
        var nodes=$(element).contents().each(function(){
                if(this.nodeType==Node.TEXT_NODE){
                    var r=new RegExp(a,'gi');
                          this.textContent=this.textContent.replace(r,b);
                } else { 
                    p(a,b,this);
                }
        });
    }
    p('888-888-8888','(999)-999-9999');
    p('(888)-888-8888','(999)-999-9999');
    p('(888) 888-8888','(999)-999-9999');
});

它成功替换了列出的第一个表单的所有实例。但似乎忽略了括号。我试过用反斜杠逃避没有运气。我的正则表达能力不是很好,所以我真的很感激一些帮助。

3 个答案:

答案 0 :(得分:8)

因为您正在传递字符串以创建正则表达式,所以您需要转义括号:

p('888-888-8888','(999)-999-9999');
p('\\(888\\)-888-8888','(999)-999-9999');
p('\\(888\\) 888-8888','(999)-999-9999');

另一种方法是使用单一模式:

p('(888-|\\(888\\)[- ])888-8888','(999)-999-9999');

答案 1 :(得分:2)

描述

如果您已经确定该值是电话号码,那么您可以使用此表达式,该表达式允许任何部分之间的任何非数字分隔符,甚至根本不允许分隔符

正则表达式:^\D?(\d{3})\D?\D?(\d{3})\D?(\d{4})

替换为:($1)-$2-$3

enter image description here

要匹配特定号码的所有实例,您可以使用:

^\D?(888)\D?\D?(888)\D?(8888)和相同的替换($1)-$2-$3

Javascript示例

输入样本

0001112222
188-818-8818
288-828-8828
(388)-838-8838
(488) 848-8848

<强>代码

<script type="text/javascript">
  var re = /^\D?(\d{3})\D?\D?(\d{3})\D?(\d{4})/;
  var sourcestring = "source string to match with pattern";
  var replacementpattern = "($1)-$2-$3";
  var result = sourcestring.replace(re, replacementpattern);
  alert("result = " + result);
</script>

替换后

(000)-111-2222
(188)-818-8818
(288)-828-8828
(388)-838-8838
(488)-848-8848

答案 2 :(得分:0)

您可以使用正则表达式:

$("p").each(function() {
    var rep = $(this).text();
    rep = rep.replace(/\(?([0-9]{3})\)?[- ]([0-9]{3})[- ]([0-9]{4})/, '($1)-$2-$3');
    $(this).text(rep);
});

http://jsfiddle.net/hhGgQ/2/