我正在搜索一个用<a href>
替换一些随机电话号码的正则表达式。电话号码应该主要是瑞典语,但也应该支持非瑞典语。
我想支持以下格式:
(0 + 9号码)
(0 + 8个数字)
(0 + 7个数字)
通常根据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>'));
});
});
答案 0 :(得分:2)
以下内容似乎捕获了测试页中几乎所有允许的格式。
pattern: /([^\d\+]|^|>)((((\+|00)(\d\d)\s*(\(0\))?)|0)(\s*\d){7,9})([^\d\+]|$|<)/gi
replace: '$1<a href="tel:$2">$2</a>$9'
答案 1 :(得分:1)
也许这会有用吗?
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]