2

我正在寻找一个正则表达式,它将一些随机电话号码替换为<a href>. 电话号码应主要是瑞典语,但也应支持非瑞典语。

我想支持以下格式:
(0 + 9 个数字)

  • +46xxxxxxxxx
  • 0046xxxxxxxxx
  • 0xxxxxxxxx

(0 + 8 个数字)

  • +46xxxxxxxx
  • 0046xxxxxxxx
  • 0xxxxxxxx

(0 + 7 个数字)

  • +46xxxxxx
  • 0046xxxxxxx
  • 0xxxxxxx

通常它们也会根据页面的格式进行格式化,但是我不需要支持它(尽管它会很棒)。

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

/( |^|>)((((\+|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>'));
    });
});
4

3 回答 3

3

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

在此处输入图像描述

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

你的 JSFiddle 的分支

于 2013-05-14T12:48:31.363 回答
2

也许这会起作用?

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/

于 2013-05-14T12:31:37.217 回答
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);
   });  

--> [真,真,真,真,真,真,真,真,真,真]

于 2013-05-14T12:53:23.240 回答