Linkyfing欧洲电话号码

时间:2013-05-14 12:20:01

标签: javascript jquery regex

我正在搜索一个用<a href>替换一些随机电话号码的正则表达式。电话号码应该主要是瑞典语,但也应该支持非瑞典语。

我想支持以下格式:
(0 + 9号码)

  • + 46xxxxxxxxx
  • 0046xxxxxxxxx
  • 0xxxxxxxxx

(0 + 8个数字)

  • + 46xxxxxxxx
  • 0046xxxxxxxx
  • 0xxxxxxxx

(0 + 7个数字)

  • + 46xxxxxxx
  • 0046xxxxxxx
  • 0xxxxxxx

通常根据this页面的格式对它们进行格式化,但是我没有要求支持(尽管它会很棒)。

到目前为止我尝试了很多正则表达式。使用this answer我试图制作我自己的版本,但我似乎无法让它工作。 我最接近的是这个正则表达式,但它删除了太多:

/( |^|>)((((\+|00)[0-9]{2} ?(\(0\))?)|0)([0-9]{2}-? ?[0-9]{7})|([0-9]{3}-? ?[0-9]{6})|([0-9]{1}-? ?[0-9]{8}))( |$|<)/gi

这是我的小提琴:http://jsfiddle.net/xAXy4/1/

我的脚本的目标是识别电话号码并使其成为<a href="tel:XXX">XXX</a>链接。 我目前的代码是:

$(document).ready(function () {

    var patt=/( |^|>)((((\+|00)[0-9]{2} ?(\(0\))?)|0)([0-9]{2}-? ?[0-9]{7})|([0-9]{3}-? ?[0-9]{6})|([0-9]{1}-? ?[0-9]{8}))( |$|<)/gi

    $('*','body').each(function() {
        $(this).html($(this).html().replace(patt,'<a href="tel:$2">$2</a>'));
    });
});

3 个答案:

答案 0 :(得分:2)

以下内容似乎捕获了测试页中几乎所有允许的格式。

enter image description here

pattern: /([^\d\+]|^|>)((((\+|00)(\d\d)\s*(\(0\))?)|0)(\s*\d){7,9})([^\d\+]|$|<)/gi
replace: '$1<a href="tel:$2">$2</a>$9'

Fork of your JSFiddle

答案 1 :(得分:1)

也许这会有用吗?

Regexper.com

var regex = /((\+\d{2}|00\d{2}|0)\d{7,9})/g,
    text = 'hello call me +46123456789';

text = text.replace(regex, function(all) {
    return '<a href="tel:'+all+'">'+all+'</a>';
}); 

console.log(text);

但与你的测试案例一样,这只是搞乱了:http://jsfiddle.net/xAXy4/2/

答案 2 :(得分:0)

使用/(?:\+46|0046|0)\d{7,9}/

['+46123456789', '0046123456789', '0123456789',
 '+4612345678', '004612345678', '012345678',
 '+461234567' ,'00461234567', '01234567'].map (
   function (t) { 
     return /(?:\+46|0046|0)\d{7,9}/.test (t);
   });  

- &GT; [true,true,true,true,true,true,true,true,true]