2012-01-06 37 views
81

Tôi hiện đang hiển thị số điện thoại như 2124771000. Tuy nhiên, tôi cần số được định dạng ở dạng có thể đọc được nhiều người hơn, ví dụ: 212-477-1000. Dưới đây là của tôi hiện tại HTML:Cách định dạng số điện thoại với jQuery

<p class="phone">2124771000</p> 
+1

Too Late câu trả lời , nhưng chỉ để được trợ giúp những người truy cập trang này URL: http://igorescobar.github.io/jQuery-Mask-Plugin/ – Senthil

+5

Không chắc chắn rằng tôi hiểu trạng thái đã đóng trên trang này. Không xây dựng dường như không đúng ...Tôi thấy thông tin này cực kỳ hữu ích và liên kết trực tiếp đến vấn đề mang tôi đến đây. Tôi không phản đối thực tế là nó đã bị đóng, nhưng lý do hiển thị bị đóng –

+0

Có lẽ câu hỏi đã được chỉnh sửa và ít mô tả trước ... nó có vẻ như một câu hỏi SO hoàn toàn hợp lệ và trả lời cho tôi, và rất nhiều upvotes. –

Trả lời

190

đơn giản: http://jsfiddle.net/Xxk3F/3/

$('.phone').text(function(i, text) { 
    return text.replace(/(\d{3})(\d{3})(\d{4})/, '$1-$2-$3'); 
}); 

Hoặc: http://jsfiddle.net/Xxk3F/1/

$('.phone').text(function(i, text) { 
    return text.replace(/(\d\d\d)(\d\d\d)(\d\d\d\d)/, '$1-$2-$3'); 
}); 
+3

Tôi đã sửa đổi điều này để hỗ trợ các sự kiện 'thay đổi' trong các trường nhập. http://jsfiddle.net/gUsUK/ –

+2

Một chút mạnh mẽ hơn của một regex (mặc dù nó đòi hỏi một chức năng thay thế tùy chỉnh) sẽ là '/ (\ d {3})? (\ d {3}) (\ d { 4}) $/'trong trường hợp không có mã vùng – RevanProdigalKnight

+0

Có hợp lệ cho các số điện thoại trên toàn thế giới không? – user2601010

49
var phone = '2124771000', 
    formatted = phone.substr(0, 3) + '-' + phone.substr(3, 3) + '-' + phone.substr(6,4) 
+6

@AndreasAL: Bởi vì một động cơ regex có chi phí cao, đặc biệt là cho một cái gì đó mà các định dạng đầu vào được biết đến và hoạt động chuỗi đơn giản là FAR hiệu quả hơn. Và tất nhiên, có quy tắc sử dụng regex cho một vấn đề chỉ khiến bạn có hai vấn đề. –

+4

Giải pháp này cũng định dạng đúng các số điện thoại với các chữ cái trong đó, như "212555IDEA". –

+0

hoạt động tốt trong môi trường cửa sổ nhưng không hoạt động trên thiết bị iOS. là có bất kỳ thay thế hoạt động trong cả hai nền tảng –

3

thử một cái gì đó như thế này ..

jQuery.validator.addMethod("phoneValidate", function(number, element) { 
    number = number.replace(/\s+/g, ""); 
    return this.optional(element) || number.length > 9 && 
     number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/); 
}, "Please specify a valid phone number"); 

$("#myform").validate({ 
    rules: { 
    field: { 
     required: true, 
     phoneValidate: true 
    } 
    } 
}); 
11

Đừng quên đảm bảo bạn đang làm việc với các số nguyên thuần túy.

var separator = '-'; 
$(".phone").text(function(i, DATA) { 
    DATA 
     .replace(/[^\d]/g, '') 
     .replace(/(\d{3})(\d{3})(\d{4})/, '$1' + separator + '$2' + separator + '$3'); 
    return DATA; 
}); 
+2

điểm rất tốt, đáng chú ý. –

3

Đây là sự kết hợp của một số câu trả lời này. Điều này có thể được sử dụng cho các lĩnh vực đầu vào. Ưu đãi với số điện thoại dài 7 và 10 chữ số.

// Used to format phone number 
function phoneFormatter() { 
    $('.phone').on('input', function() { 
    var number = $(this).val().replace(/[^\d]/g, '') 
    if (number.length == 7) { 
     number = number.replace(/(\d{3})(\d{4})/, "$1-$2"); 
    } else if (number.length == 10) { 
     number = number.replace(/(\d{3})(\d{3})(\d{4})/, "($1) $2-$3"); 
    } 
    $(this).val(number) 
    }); 
} 

Sống dụ: JSFiddle

Tôi biết điều này không trực tiếp trả lời các câu hỏi, nhưng khi tôi đã tìm ra câu trả lời này là một trong những trang đầu tiên tôi được tìm thấy. Vì vậy, câu trả lời này là dành cho bất cứ ai tìm kiếm một cái gì đó tương tự như những gì tôi đang tìm kiếm.

1

tôi đã cung cấp liên kết jsfiddle để bạn có thể định dạng số điện thoại Mỹ như (XXX) XXX-XXX

$('.class-name').on('keypress', function(e) { 
    var key = e.charCode || e.keyCode || 0; 
    var phone = $(this); 
    if (phone.val().length === 0) { 
    phone.val(phone.val() + '('); 
    } 
    // Auto-format- do not expose the mask as the user begins to type 
    if (key !== 8 && key !== 9) { 
    if (phone.val().length === 4) { 
     phone.val(phone.val() + ')'); 
    } 
    if (phone.val().length === 5) { 
     phone.val(phone.val() + ' '); 
    } 
    if (phone.val().length === 9) { 
     phone.val(phone.val() + '-'); 
    } 
    if (phone.val().length >= 14) { 
     phone.val(phone.val().slice(0, 13)); 
    } 
    } 

    // Allow numeric (and tab, backspace, delete) keys only 
    return (key == 8 || 
    key == 9 || 
    key == 46 || 
    (key >= 48 && key <= 57) || 
    (key >= 96 && key <= 105)); 
}) 

.on('focus', function() { 
    phone = $(this); 

    if (phone.val().length === 0) { 
    phone.val('('); 
    } else { 
    var val = phone.val(); 
    phone.val('').val(val); // Ensure cursor remains at the end 
    } 
}) 

.on('blur', function() { 
    $phone = $(this); 

    if ($phone.val() === '(') { 
    $phone.val(''); 
    } 
}); 

Sống dụ: JSFiddle

4

Sử dụng một thư viện để xử lý số điện thoại. Libphonenumber bởi Google là đặt cược tốt nhất của bạn.

// Require `PhoneNumberFormat`. 
var PNF = require('google-libphonenumber').PhoneNumberFormat; 

// Get an instance of `PhoneNumberUtil`. 
var phoneUtil = require('google-libphonenumber').PhoneNumberUtil.getInstance(); 

// Parse number with country code. 
var phoneNumber = phoneUtil.parse('202-456-1414', 'US'); 

// Print number in the international format. 
console.log(phoneUtil.format(phoneNumber, PNF.INTERNATIONAL)); 
// => +1 202-456-1414 

Tôi khuyên bạn nên sử dụng điều này package bởi seegno.

-2

có thể điều này sẽ giúp

var countryCode = +91; 
var phone=1234567890; 
phone=phone.split('').reverse().join('');//0987654321 
var formatPhone=phone.substring(0,4)+'-';//0987- 
phone=phone.replace(phone.substring(0,4),'');//654321 
while(phone.length>0){ 
formatPhone=formatPhone+phone.substring(0,3)+'-'; 
phone=phone.replace(phone.substring(0,3),''); 
} 
formatPhone=countryCode+formatPhone.split('').reverse().join(''); 

bạn sẽ nhận được + 91-123-456-7890

0

Cân nhắc libphonenumber-js (https://github.com/halt-hammerzeit/libphonenumber-js) mà là một phiên bản nhỏ hơn của libphonenumber đầy đủ và nổi tiếng.

nhanh và ví dụ bẩn:

$(".phone-format").keyup(function() { 
// Don't reformat backspace/delete so correcting mistakes is easier 
if (event.keyCode != 46 && event.keyCode != 8) { 
    var val_old = $(this).val(); 
    var newString = new libphonenumber.asYouType('US').input(val_old); 
    $(this).focus().val('').val(newString); 
} 
}); 

(Nếu bạn sử dụng một regex để tránh tải về thư viện, tránh định dạng lại trên BackSpace/xóa sẽ làm cho nó dễ dàng hơn để sửa lỗi chính tả.)

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