匹配手机国家/地区代码与JavaScript

时间:2012-01-02 02:43:34

标签: javascript regex

我正在尝试使用javascript函数来替换电话号码的国家/地区代码部分。

输入为+90(533)333 33 33,我想用javascript替换+90部分。我试过写一个正则表达式,但我不能成功。

/^\++[a-z]+\s$/

编辑:最终解决方案

$("#ddlCountry").change(function () {
    if ($("#tMobile").val() == '') {
        $("#tMobile").val("+" + $(this).find(":selected").attr("CountryCode")
        + " ");
    } else {
        $("#tMobile").val($("#tMobile").val().replace(/^(\+\d*)/,
        "+" + $(this).find(":selected").attr("CountryCode")));
    }
});

3 个答案:

答案 0 :(得分:2)

只要您可以保证您的输入将采用该格式:

var phone = '+90 (533) 333 33 33';
    phone.replace(/^\+[0-9]{2}/,'xyz')

之前:+90(533)333 33 33

之后:xyz(533)333 33 33

答案 1 :(得分:2)

以下模式应匹配任何country code,假设国家/地区代码与下一个数字之间始终存在非数字字符:/^(\+\d*)/

var phoneNumber = "+90 (533) 333 33 33";
phoneNumber = phoneNumber.replace(/^(\+\d*)/, '+852');
alert(phoneNumber);

Try it on JSFiddle

修改 好的......这有点傻,你也可以这样做:

var phoneNumber = "+90 (533) 333 33 33";
phoneNumber = phoneNumber.replace(/^(\+)(\d*)(.*)/, '$1852$3');
alert(phoneNumber);

Try it on JSFiddle

我试图不必在新的国家/地区代码中包含加号,但除了上面所示的内容之外,我找不到其他方法。基本上,它使用三个捕获组:一个用于加号,一个用于国家代码,一个用于电话号码的其余部分。在新的国家/地区代码中,我将国家/地区代码本身夹在$1$3之间,转换为:

将旧电话号码替换为新的电话号码,其中包括第一个捕获组(加号),然后是新的国家/地区代码(“852”),后跟剩余的电话号码(“(533)333 33” 33" )。

答案 2 :(得分:1)

这比正则表达式要快得多。

function replaceCountryCode ( number, replaceWith ) {
    return replaceWith + number.substr( number.indexOf( ' ' ) );
};

演示:http://jsfiddle.net/ThinkingStiff/XEBdP/
效果:http://jsperf.com/regex-vs-indexof-replace

enter image description here