2011-08-14 42 views
18

Nếu tất cả những gì tôi có là một chuỗi gồm 10 chữ số trở lên, làm cách nào tôi có thể định dạng số này làm số điện thoại?Cách tốt nhất để định dạng số điện thoại bằng Python là gì?

Một số ví dụ tầm thường:

555-5555 
555-555-5555 
1-800-555-5555 

Tôi biết những người không phải cách duy nhất để định dạng chúng, và nó rất có thể tôi sẽ để mọi thứ ra nếu tôi làm điều đó bản thân mình. Có một thư viện python hoặc một cách tiêu chuẩn để định dạng số điện thoại?

+5

chúng có thể đến từ phạm vi nào? Các quốc gia khác nhau có các quy ước khác nhau để định dạng số điện thoại. –

+4

Đã chọn. Vui lòng không viết mã giả định mọi số điện thoại ở định dạng Hoa Kỳ. Nó thực sự là khó chịu để cố gắng làm việc với các chương trình như thế. – snap

+1

Dường như cách tiêu chuẩn để viết số điện thoại được gọi là E.123. Vì vậy, một số quốc gia trông giống như '(800) 555 5555', và một số quốc tế trông giống như' +1 800 555 5555'. Nhưng đừng quên độ dài của các nhóm khác nhau thay đổi theo quốc gia. http://en.wikipedia.org/wiki/E.123 –

Trả lời

32

cho thư viện: PHONENUMBERS (pypi, source)

Phiên bản Python của thư viện chung của Google để phân tích cú pháp, định dạng, lưu trữ và xác thực số điện thoại quốc tế.

Readme không đủ, nhưng tôi thấy mã được ghi lại tài liệu.

+15

Đối với những người tìm kiếm câu trả lời nhanh, đây là mẫu có số của Hoa Kỳ. 'pip install phonenumbers' rồi' '' nhập phonenumbers phonenumbers.format_number (phonenumbers.parse ("8006397663", 'US'), phonenumbers.PhoneNumberFormat.NATIONAL) '' ' –

+1

Cách sử dụng định dạng tùy chỉnh trong thư viện này? Tôi cần {CountryCode} - \ d {3} - {remaining_numbers} – Crusader

+0

Readme trên github thật tuyệt. https://github.com/daviddrysdale/python-phonenumbers – Ryan

0

Một giải pháp đơn giản có thể là bắt đầu ở phía sau và chèn dấu nối sau bốn số, sau đó thực hiện các nhóm ba cho đến khi bắt đầu chuỗi. Tôi không nhận thức được một chức năng được xây dựng hoặc bất cứ điều gì như thế.

Bạn có thể tìm thấy điều này hữu ích: http://www.diveintopython3.net/regular-expressions.html#phonenumbers

Regular expressions sẽ hữu ích nếu bạn đang chấp nhận người dùng nhập vào các số điện thoại. Tôi sẽ không sử dụng cách tiếp cận chính xác theo liên kết ở trên. Một cái gì đó đơn giản hơn, giống như chỉ tước các chữ số, có lẽ dễ dàng hơn và tốt hơn.

Ngoài ra, chèn dấu phẩy vào các số là một vấn đề tương tự đã được giải quyết một cách hiệu quả ở nơi khác và có thể được điều chỉnh cho vấn đề này.

+0

liên kết đến sách đã chết –

+0

Tôi đã sửa liên kết. – ChrisP

19

Có vẻ như ví dụ của bạn được định dạng với ba nhóm chữ số trừ cuối cùng, bạn có thể viết một hàm đơn giản, sử dụng ngàn seperator và thêm chữ số cuối cùng:

>>> def phone_format(n):                                 
...  return format(int(n[:-1]), ",").replace(",", "-") + n[-1]                           
... 
>>> phone_format("5555555") 
'555-5555' 
>>> phone_format("5555555") 
'555-5555' 
>>> phone_format("5555555555") 
'555-555-5555' 
>>> phone_format("18005555555") 
'1-800-555-5555' 
2

Dưới đây là một điều chỉnh từ utdemir's solutionthis solution sẽ hoạt động với Python 2.6, vì trình định dạng "," mới trong Python 2.7.

def phone_format(phone_number): 
    clean_phone_number = re.sub('[^0-9]+', '', phone_number) 
    formatted_phone_number = re.sub("(\d)(?=(\d{3})+(?!\d))", r"\1-", "%d" % int(clean_phone_number[:-1])) + clean_phone_number[-1] 
    return formatted_phone_number 
Các vấn đề liên quan