2012-01-02 24 views
5

Tôi đang cố gắng triển khai hàm javascript để thay thế một phần mã quốc gia của một số điện thoại.Mã quốc gia của số điện thoại phù hợp với javascript

Đầu vào là +90 (533) 333 33 33 và tôi muốn thay thế +90 phần bằng javascript. Tôi đã cố gắng viết một regex nhưng tôi không thể thành công.

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

EDIT: giải pháp cuối cùng

$("#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

Tại sao bạn sử dụng '[a-z]' khi bạn phù hợp * số *? –

+0

Cụm từ thông dụng đó sẽ khớp với một hoặc nhiều '+' theo sau bởi một hoặc nhiều 'a-z' theo sau chính xác một phần khoảng trắng. Tôi không thấy làm thế nào nó có thể phù hợp với '90'. Nó cũng không bao gồm bất kỳ lệnh nào để thực hiện bất kỳ sự thay thế nào. Bạn có thể bao gồm nhiều mã của mình hơn không? Điều này không nhìn ở bất cứ đâu gần đủ ... – sarnold

+0

Vì [0-9] không hoạt động được .. Tôi không giỏi với các cụm từ thông dụng. –

Trả lời

2

Các mô hình sau đây sẽ phù hợp với bất kỳ country code, giả sử luôn có một nhân vật phi các chữ số từ mã quốc gia và bất cứ điều gì số xuất phát tiếp theo: /^(\+\d*)/

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

(Try it on JSFiddle)

Edit: Được rồi ... điều này hơi ngớ ngẩn, bạn cũng có thể làm điều này:

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

(Try it on JSFiddle)

Tôi đã cố gắng làm cho nó không cần thiết để bao gồm dấu cộng trong mã quốc gia mới, nhưng tôi không thể tìm cách làm điều đó ngoài những gì tôi đã hiển thị ở trên. Về cơ bản, nó sử dụng ba nhóm chụp: một cho dấu cộng, một cho mã quốc gia, và một cho phần còn lại của số điện thoại. Trong mã quốc gia mới, tôi đã kẹp mã quốc gia ở giữa $1$3, được dịch thành:

Thay thế số điện thoại cũ bằng số điện thoại mới bao gồm nhóm chụp đầu tiên (dấu cộng), sau đó là mã quốc gia mới ("852"), tiếp theo là phần còn lại của số điện thoại ("(533) 333 33 33").

+0

@Có, tôi đã xóa câu trả lời này trong khi tôi tìm kiếm giải pháp thỏa đáng hơn.Tôi sẽ đi trước và hủy xóa nó, mặc dù. Tôi hiện đang cố gắng tìm ra cách thay thế chỉ các chữ số trong mã quốc gia, và không phải là dấu cộng. Mã ở trên hoạt động nhưng yêu cầu mã quốc gia mới chứa ký hiệu dấu cộng. – aeskr

1

chừng nào bạn có thể đảm bảo rằng đầu vào của bạn sẽ được ở định dạng đó:

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

Trước: +90 (533) 333 33 33

Sau: xyz (533) 333 33 33

+0

Mã này không khớp với mã quốc gia có 3 chữ số. –

+0

Rất tiếc, xin lỗi, hãy sử dụng điều này '/^\ + [0-9] {1,} /'. Nó sẽ khớp mã quốc gia với 1-3 chữ số. –

Các vấn đề liên quan