Những ký tự đặc biệt nào nên cho phép cho một số điện thoại?


20

Vì vậy, tôi đang thiết kế một trang web sẽ được sử dụng cho người dùng toàn cầu, bao gồm người dùng từ Canada, Mỹ, Ấn Độ, Vương quốc Anh, v.v. Tôi cần áp dụng xác thực cho trường số điện thoại này, nhưng tôi không chắc chắn cách tốt nhất để thực hiện điều này .

Một số định dạng hợp lệ tôi có thể nghĩ đến là:

  1. 1800123456 (Ấn Độ)
  2. sử dụng "-" trong số điện thoại của Hoa Kỳ

Tôi hơi bối rối về những ký tự đặc biệt nào tôi nên cho phép người dùng nhập (ví dụ - / ():). Làm thế nào những người khác đã giải quyết điều này trong quá khứ?


1
Còn số điện thoại được thể hiện bằng các chữ cái, ví dụ: 0800DIALTHIS thì sao?
mouviciel

3
Bạn đang cố gắng ngăn chặn điều gì? Người dùng nói dối? Người dùng không muốn bạn biết số của họ? Người dùng quá lười biếng để nhập bất cứ điều gì? Người dùng làm một lỗi đánh máy?
Stewol

@ mouviviel: vâng, tôi cũng cần phải suy nghĩ về việc tôi đang thực hiện một kịch bản định giá tại một thời điểm vì vậy tôi sẽ suy nghĩ về nó.
Kiểm lâm

@Benjol: Ứng dụng này là một ứng dụng thương mại vì vậy chúng tôi không thể mạo hiểm với các đối tác của mình, tôi biết người dùng sẽ nhập đúng số nhưng nếu anh ấy / cô ấy không làm như vậy. Định giá là khá quan trọng vì chúng lưu ứng dụng không chỉ lỗi chính tả. Tôi không muốn DB của tôi chứa đầy rác vô dụng.
Kiểm lâm

5
Bạn đang làm gì để xác nhận địa chỉ email của họ? Bạn sẽ quan sát thấy rằng gần như tất cả các trang web thực hiện xác nhận "đời thực" (tức là gửi thư cho bạn). Tôi nghĩ rằng nếu số điện thoại đó quan trọng, bạn cần phải làm một cái gì đó tương đương.
Stewol

Câu trả lời:


21

Chỉ vì bạn có thể hạn chế một cái gì đó (đó là những gì bạn được trả tiền, với tư cách là một lập trình viên, để viết mã), điều đó không có nghĩa là bạn thực sự nên làm điều này.

Điểm xác nhận một số là gì? Tại sao nó hữu ích? Sẽ không thành công nếu người dùng nhập "0800DIALTHIS" hoặc "私 は 番号 っ い", hoặc "(499) 123-45-67 mô tả 4425"? Nó chắc chắn sẽ (bạn nói "toàn cầu". Không phải bạn?), Trong khi người dùng chỉ muốn truyền đạt cho bạn một thông tin quan trọng về cách liên hệ với họ qua điện thoại.

Ngoài ra, cách lưu trữ dữ liệu nên được điều chỉnh theo cách chúng được sử dụng. Làm thế nào bạn sẽ sử dụng những con số? Chúng sẽ được sử dụng để tự động gửi SMS spam SMS hay chúng sẽ được các nhà quản lý quay số thủ công? Nếu đó là cái sau, thì việc cho phép bất kỳ nhân vật bổ sung nào cũng được, vì bộ não con người sẽ có thể phân tích chúng theo cách họ thấy phù hợp nhất; và trong trường hợp này, bạn không thực sự cần bất kỳ xác nhận nào, điều này sẽ chỉ gây khó chịu cho người dùng.


7
+1 cho "người dùng chỉ muốn truyền đạt cho bạn một thông tin quan trọng". Tôi thường thấy các xác nhận không cần thiết chỉ đơn giản là gây khó chịu cho người dùng mà không có bất kỳ yêu cầu kỹ thuật (hoặc tổ chức) thực tế nào.
perdian

6
+1 - xác thực số điện thoại (đặc biệt được xác định rộng rãi) thường là vô nghĩa, không phải là bằng chứng trong tương lai (ví dụ, KL5-6743 là số điện thoại hợp lệ) và chỉ gây khó chịu cho những người dùng gặp trường hợp đặc biệt. Làm cho bạn số điện thoại một trường văn bản lớn và để trình quay số tự động (nếu có bất kỳ trong kịch bản này) phân tích những gì họ có thể. Các ngoại lệ có thể được nêu ra cho những người có thể xử lý tình huống một cách thích hợp.
EZ Hart

8
+1 và quan trọng nhất chỉ vì số điện thoại hợp lệ, điều đó không có nghĩa là nó tồn tại và ngay cả khi nó tồn tại, điều đó không có nghĩa là nó thuộc về người được hỏi ...
Stewol

Ồ vâng, tôi sẽ tìm ra các quốc gia nơi người dùng chính của chúng tôi sống và sau đó tôi sẽ viết một số mã xác nhận. Cảm ơn tất cả, tôi đánh giá cao những nỗ lực của bạn.
Kiểm lâm

4
@Ranger Điều đó hoàn toàn ngược lại với câu trả lời.
Sebastian Redl

7

Sẽ rất khó để biết một số có hợp lệ hay không, vì các quốc gia khác nhau có các định dạng khác nhau. Ở Pháp, ví dụ, 06 12 34 56 78 là số điện thoại hợp lệ, trong khi 00 12 34 56 78 thì không, vì số này chỉ có thể bắt đầu từ 01 đến 09, 06 và 07 là điện thoại di động.

Ngoài ra, các số điện thoại có thể được viết bằng nhiều định dạng ngay cả trong cùng một quốc gia. Tôi đã nhìn thấy:

  • 06 12 34 56 78
  • 0612345678
  • 06.12.34.56.78
  • 06-12-34-56-78
  • +33612345678
  • +33 (0) 6 12 34 56 78

hai cuối cùng là hình thức quốc tế.

Nói chung:

  1. Chỉ cho phép dấu ngoặc, +ký hiệu dưới dạng ký tự đầu, dấu gạch ngang, dấu chấm, dấu phẩy và dấu cách.
  2. Nếu có thể, chỉ nhớ hình thức chuẩn hóa (ví dụ +33 (0) 612345678).
  3. Nếu điều này là không thể, ít nhất là loại bỏ các ký tự phân cách (như khoảng trắng).

Đi quá sâu vào xác nhận cho mỗi quốc gia không được khuyến khích. Không chỉ có một số lượng lớn các quy tắc, mà còn thay đổi quy tắc. Ví dụ ở Pháp, vài năm trước không có số điện thoại nào bắt đầu từ 07 hoặc 09. Với số lượng điện thoại di động ngày càng tăng 07. Với dịch vụ VoIP xuất hiện 09.

Bạn cũng có thể đưa vào tài khoản số đặc biệt. Ví dụ 3635 là một số hợp lệ ở Pháp, ngay cả khi nó chỉ chứa bốn chữ số và bắt đầu bằng số khác không.


1
Nó sẽ giúp hiển thị việc sử dụng dấu ngoặc trong ví dụ của bạn. Các số quốc tế thường sử dụng chúng để gửi số 0 đứng đầu của mã vùng để cho biết rằng bạn không quay số khi gọi từ nước ngoài. Ví dụ: +31 (0)30 1234567trong đó 31 là Hà Lan, 030 là mã vùng và 1234567 là thuê bao.
Marjan Venema

2
Đừng quên một trường tùy chọn cho mã mở rộng (có thể cần phải cho phép phím pound hoặc dấu hoa thị).
rwong

@MarjanVenema, tôi không thực hiện quay số quốc tế nhiều, nhưng đó là tiêu chuẩn để thêm số không và thêm dấu ngoặc (0) để nói với bạn KHÔNG quay số? Sẽ không đơn giản hơn nếu chỉ bỏ hoàn toàn 0?
CaffGeek

@Chad: Không. Nó nói với người dùng quốc tế rằng họ cần phải loại bỏ nó và nói với người dùng quốc gia rằng họ cần sử dụng nó. Không phải tất cả các quốc gia đều có mã vùng bắt đầu bằng số không. Làm theo cách này đảm bảo rằng khi ai đó nhìn thấy số họ sẽ biết phải làm gì khi họ ở trong và khi họ ra khỏi đất nước. Rốt cuộc, không phải ai cũng gọi là cư dân trên toàn quốc ...
Marjan Venema

@MarjanVenema, ồ, tôi hiểu rồi, không nhận ra người dùng quốc gia cần nó, đã học được điều gì đó mới hôm nay.
CaffGeek

3

Không giới hạn các ký tự; lấy tất cả mọi thứ anh ấy đưa cho bạn. Nhưng khi bạn quay số, chỉ lấy các chữ số. Thậm chí sau đó nó có thể làm việc sai. Tôi đã ở Thái Lan một năm trước khi tôi biết rằng 123-4567-9 không có nghĩa là một phần mở rộng, mà là một dãy số, 1234567 đến 1234569. Khi tôi quay số "12345679", nó đã hoạt động, vì công ty điện thoại đã bỏ qua chữ số phụ. Lấy bất cứ thứ gì, chỉ quay số.

Tôi thích nó rằng điện thoại mới của tôi cho phép không gian trong số điện thoại. Tôi có thể nhập "123 456 7890" như thế, không phải tất cả được trộn lẫn với nhau.


2
+100. Không có gì tệ hơn một máy tính nói "vui lòng xóa số - khỏi số", như thể máy tính không có đầu mối làm thế nào để tự làm điều đó. Tương tự cho số thẻ tín dụng, FWIW.
Bryan Oakley

0

Chân đế, dấu gạch ngang và không gian.

Khi người dùng đã nhập số điện thoại có chứa các ký hiệu đó, bạn có thể xác thực chúng theo các quy tắc cụ thể theo quốc gia (bạn sẽ cần phải thu thập các quy tắc đó cho từng quốc gia), và sau đó các chữ số không thực sự có thể bị loại bỏ khi nó được xử lý nội bộ trong phần mềm của bạn.

Điều này là do IDD (quay số trực tiếp quốc tế) khiến cho không thể yêu cầu bất kỳ "ký tự đặc biệt" nào thực sự được sử dụng để quay số, ngoại trừ việc tạm dừng bấm các chữ số.

(Tôi hoàn toàn không hiểu biết về điều này; xin vui lòng sửa lỗi cho tôi nếu tôi sai.)


3
Bạn đang quên ký hiệu \ + để truy cập quốc tế
Marjan Venema

2
cũng cho phép chữ x - ít nhất là ở Hoa Kỳ, phổ biến là tiền tố một phần mở rộng có dấu x (ví dụ: 555-1212 x123).
Bryan Oakley

0

Điều duy nhất cần được xác nhận là số chữ số - nó có khớp với những gì bạn cần gọi không?

Mã truy cập có thể / không được phép nhập bởi người dùng (ví dụ +1 cho Hoa Kỳ). Tôi sẽ cho bạn biết lý do - nếu đó là một người Mỹ nhập cảnh và họ không phải là người hiểu biết, họ có thể sẽ muốn nhập 001 thay vì 1. Lý do là 00 là cách bạn truy cập số quốc tế từ bên trong Hoa Kỳ. Họ không biết sự khác biệt giữa điều đó và chỉ +1. Nếu bạn đang gọi điện thoại cố định giữa các mã vùng (và đôi khi trong cùng một mã vùng), bạn cũng sẽ nhập 1 trước số đó. Giống như Nhật Bản.

Đi Nhật Bản. Các đường đất tỉnh được truy cập với số 0 ở mặt trước của chúng. Nhưng nếu bạn quay số từ bên ngoài Nhật Bản, bạn không cần số 0 đó.

Số điện thoại di động ở Trung Quốc có 10 chữ số và ở Hồng Kông là 8. Nếu biểu mẫu của bạn bắt được quốc gia, thì bạn thậm chí không yêu cầu mã quốc gia ở đầu số - chỉ cần tự động hiển thị dưới dạng văn bản chỉ đọc ngay bên cạnh số họ cần nhập.

Danh sách cứ kéo dài.

Chỉ cần xác thực số lượng chữ số (đảm bảo không có chữ cái nào được chấp nhận) và giúp người dùng cuối dễ dàng nhập đúng số chữ số. Tức là họ không cần phải nhập mã quốc gia và nếu biểu mẫu của bạn siêu thông minh, họ thậm chí có thể không cần nhập mã vùng nếu đó là số điện thoại cố định. Hoặc nếu họ bắt đầu nhập những thứ như mã truy cập, như 0 trước số Nhật Bản, chỉ cần cho họ biết họ không cần.

Mọi nhân vật khác, ngoài các chữ số, sau đó sẽ là một điểm cần thiết - họ không có cơ hội nhập chúng.


1
Tôi không đồng ý để đảm bảo không có thư nào được chấp nhận - hãy tiếp tục và chấp nhận, sau đó chỉ cần bỏ qua chúng. Mọi người tự nhiên viết các phần mở rộng với một "x" hàng đầu (ví dụ: 555-1212 x123). Tại sao không cho phép điều đó? Con người có thể phân tích nó tốt, và nếu máy tính cần sử dụng nó, nó có thể loại bỏ các chữ số không tầm thường.
Bryan Oakley

0

Google có lib cho việc này:

Thư viện Java, C ++ và JavaScript phổ biến của Google để phân tích cú pháp, định dạng và xác thực số điện thoại quốc tế.

https://github.com/googlei18n/libphonenumber

Đó là nỗ lực tốt nhất, tôi nghĩ rằng phải có những trường hợp không được xử lý vì đây không phải là một nhiệm vụ dễ dàng. Cho phép người dùng nhập số và chữ cái, xóa các chữ cái sau bằng mã.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.