输入中的国际电话号码格式


International phone number format in the input

我有一个类似的输入:

<textarea name='phone_number' id='phone_number' cols='80' rows='1'><? echo $_POST['phone_number']; ?></textarea>

好吧,我用PHP做了一个函数来验证电话号码(检查它不是空的,里面没有字符,只有+和数字)

现在,我想用一些JQuery/JavaScript的东西在输入中内联格式化它,但我想的格式是国际的,比如我有:

0016073222153+1 607-322-2153

0049329351525+49 329-351-525

有什么想法吗?我该怎么做?谢谢!谢谢

我假设了很多,但它符合您的用例,可能会让您启动

var num1 = "0016073222153",
    num2 = "0049329351525";
$(document).ready(function() {
    $('body').append(
        phoneFormat(num1) + "<br />" + 
        phoneFormat(num2)
    );
});
function phoneFormat(num) {
    num = num.replace(/^0+/, '');
    num = num.replace(/[^0-9]/, '');
    if (num.length == 11) {
        if (num.substr(0, 1) == 1) num = "+1 " + num.substr(1, 3) + "-" + num.substr(4, 3) + "-" + num.substr(7, 4);
        else num = "+" + num.substr(0, 2) + " " + num.substr(2, 3) + "-" + num.substr(5, 3) + "-" + num.substr(8, 3);
    }
    return num;
}​

http://jsfiddle.net/tnv2m/

对于国家代码来说,这不是很复杂(我认为),只是一些繁重的工作。

你可以在这里获得国家代码列表。然后获取第一个数字,并从调用代码表中确定是否有下一个数字需要读取;重复,直到您确定了国家/地区代码。

对于其余的数字,你可以做一些类似的事情:

join('-', str_split($nr, 3));

这将为您提供一组3位数字,用短划线分隔。

您将无法以通用方式做到这一点。每个国家都有不同的格式,不同的地区编号等等。如果没有准确的数据库来保存所有的格式规则,你就不会有任何结果。要么是你知道规则的国家的格式,要么放弃这个想法。