2012-01-02 149 views
5

我试图实现一个JavaScript函数来替换电话号码的国家/地区代码部分。与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"))); 
    } 
}); 
+2

为什么你使用'[A-Z]'当你匹配*号*? – 2012-01-02 02:45:00

+0

该正则表达式可以匹配一个或多个'+',后跟一个或多个'a-z',后面紧跟一个空格。我不明白它如何匹配'90'。它也不包括任何命令来做任何替换。你可以包含更多的代码吗?这看起来没有足够的接近... – sarnold 2012-01-02 02:46:09

+0

因为[0-9]也没有工作..我不擅长正则表达式。 – 2012-01-02 02:48:11

回答

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”)。

+0

@Hasan,我删除了这个答案,而我寻找一个更令人满意的解决方案。不过,我会继续并取消删除它。我目前正试图弄清楚如何只替换国家代码中的数字,而不是加号。上面的代码工作,但它需要新的国家代码包含一个加号。 – aeskr 2012-01-02 03:14:52

1

只要你能保证你的投入将在格式:

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

前:+90(533)333 33 33

After:xyz(533)333 33 33

+0

它与3位数字的国家代码不匹配。 – 2012-01-02 03:11:30

+0

哎呀,抱歉使用这个'/^\ + [0-9] {1,} /'。它将匹配1-3位数的国家代码。 – 2012-01-02 03:33:38