2012-01-02 150 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