2010-07-11 6 views
6

Hãy nói rằng tôi có một chuỗi định dạngFormat Number dựa trên Format String trong Javascript/jQuery

  • "XXX - XXX - XXXX" (định dạng số điện thoại), hoặc bất kỳ chuỗi định dạng khác, trong đó đứng X đối với một số
  • tôi muốn giữ lại định dạng trong chuỗi định dạng (khoảng cách, dấu gạch ngang vv), nhưng trao đổi mỗi X đối với một số và thả tất cả các định dạng trong chuỗi nguồn

Ví dụ:

  • Nhập: "abc + d (123) 4567890", Định dạng chuỗi: "XXX - XXX - XXXX", Đầu ra: "123 - 456 - 7890"
  • Nhập "abc 1 2 3 4567890", Định dạng chuỗi: "X: X! XXXXX, XXX", Đầu ra: "1: 2! 34567,890"
  • Nhập "1234567890", Chuỗi định dạng: "(XXX) XXX-XXXX", Đầu ra: "(123)456-7890 "

Tôi nghĩ tôi có thể lấy số bằng cách lặp qua chuỗi nguồn (ký tự foreach trong '') nhưng tôi không chắc chắn làm thế nào tôi có thể đặt chúng lại với nhau theo đúng định dạng. Có lẽ có một chức năng jQuery mà thực hiện điều này?

Trả lời

5

Dưới đây là một cách để làm điều đó:

function formatPhoneNumber(input, format) { 
    // Strip non-numeric characters 
    var digits = input.replace(/\D/g, ''); 

    // Replace each "X" with the next digit 
    var count = 0; 
    return format.replace(/X/g, function() { 
     return digits.charAt(count++); 
    }); 
} 
4
"abc+d(123)4567890" 
.replace(/\D/g, "") 
.replace(/(\d{3})(\d{3})(\d{4})/, "$1 - $2 - $3") 

Trước tiên, chúng tôi xóa các chữ số không (\ D), sau đó nhóm chúng lại và cuối cùng chúng tôi sử dụng các nhóm trong văn bản thay thế của chúng tôi.

+0

Xin lỗi tôi đã không rõ ràng trên các chuỗi định dạng có thể khác nhau (ví dụ như có thể thay đổi đối với X-XXX-XX-XX) vì vậy nó sẽ cần phải được có thể đối phó với định dạng chung. – Alex