ควรมีอักขระพิเศษอะไรบ้างสำหรับหมายเลขโทรศัพท์


20

ดังนั้นฉันกำลังออกแบบเว็บเพจที่จะใช้สำหรับผู้ใช้ทั่วโลกรวมถึงผู้ใช้จากแคนาดาสหรัฐอเมริกาอินเดียสหราชอาณาจักร ฯลฯ ฉันต้องใช้การตรวจสอบความถูกต้องสำหรับฟิลด์หมายเลขโทรศัพท์นี้ แต่ฉันไม่แน่ใจว่าวิธีที่ดีที่สุดในการดำเนินการนี้ .

รูปแบบที่ถูกต้องบางอย่างที่ฉันนึกได้คือ:

  1. 1800123456 (อินเดีย)
  2. การใช้ "-" ในหมายเลขโทรศัพท์สหรัฐ

ฉันสับสนเล็กน้อยเกี่ยวกับอักขระพิเศษที่ฉันควรอนุญาตให้ผู้ใช้ป้อน (เช่น- / ()) คนอื่น ๆ แก้ไขปัญหานี้ได้อย่างไรในอดีต?


1
แล้วหมายเลขโทรศัพท์ที่แสดงด้วยตัวอักษรเช่น 0800DIALTHIS คืออะไร
mouviciel

3
คุณพยายามป้องกันอะไร ผู้ใช้โกหกหรือไม่ ผู้ใช้ไม่ต้องการให้คุณรู้จำนวนของพวกเขา? ผู้ใช้ขี้เกียจเกินไปที่จะป้อนอะไร ผู้ใช้พิมพ์ผิดหรือไม่?
Benjol

@ mouviviel: ใช่ฉันก็ต้องคิดเกี่ยวกับฉันกำลังถ่ายฉากหนึ่งครั้งในใจดังนั้นฉันจะคิดเกี่ยวกับมัน
แรนเจอร์

@Benjol: แอปพลิเคชั่นนี้เป็นแอพพลิเคชั่นเชิงพาณิชย์ดังนั้นเราจึงไม่สามารถเสี่ยงกับลูกค้าของเราได้ฉันรู้ว่าผู้ใช้จะป้อนหมายเลขที่ถูกต้อง แต่ถ้าเขา / เธอไม่ทำ Valdation นั้นค่อนข้างสำคัญเพราะมันไม่ได้บันทึกเฉพาะแอปพลิเคชันเท่านั้น ฉันไม่ต้องการให้ฐานข้อมูลเต็มไปด้วยขยะที่ไร้ประโยชน์
แรนเจอร์

5
คุณทำอะไรเพื่อตรวจสอบที่อยู่อีเมลของพวกเขา? คุณจะสังเกตเห็นว่าเว็บไซต์เกือบทั้งหมดใช้การตรวจสอบ "ชีวิตจริง" (เช่นส่งอีเมลถึงคุณ) ฉันคิดว่าหากหมายเลขโทรศัพท์นั้นสำคัญคุณต้องทำสิ่งที่เทียบเท่า
Benjol

คำตอบ:


21

เพียงเพราะคุณสามารถบังคับบางสิ่งได้ (นั่นคือสิ่งที่คุณจ่ายสำหรับการเขียนโค้ด) ซึ่งไม่ได้หมายความว่าคุณควรทำสิ่งนี้

จุดตรวจสอบหมายเลขคืออะไร ทำไมถึงมีประโยชน์ มันจะล้มเหลวหรือไม่หากผู้ใช้ป้อน "0800DIALTHIS" หรือ "私は電話番号っていいい" หรือ "(499) 123-45-67 добавочный 4425" มันจะแน่นอน (คุณพูดว่า "ทั่วโลก" ใช่มั้ย?) ในขณะที่ผู้ใช้แค่ต้องการส่งข้อมูลสำคัญเกี่ยวกับวิธีการติดต่อพวกเขาผ่านทางโทรศัพท์

นอกจากนี้วิธีการจัดเก็บข้อมูลควรควบคุมโดยวิธีการใช้งาน คุณจะใช้ตัวเลขอย่างไร พวกเขาจะถูกใช้เพื่อส่งสแปม SMS โดยอัตโนมัติหรือไม่หรือพวกเขาจะโทรออกด้วยตนเองโดยผู้จัดการ? ถ้ามันเป็นตัวสุดท้ายการปล่อยให้ตัวละครใด ๆ เพิ่มเติมก็โอเคเพราะสมองของมนุษย์จะสามารถแยกพวกมันในแบบที่พวกเขาเห็นว่าเหมาะสมที่สุด และในกรณีนี้คุณไม่จำเป็นต้องมีการตรวจสอบความถูกต้องใด ๆ ซึ่งจะรบกวนผู้ใช้งานของมนุษย์


7
+1 สำหรับ "ผู้ใช้ต้องการนำเสนอข้อมูลชิ้นสำคัญ" ฉันมักจะเห็นการตรวจสอบที่ไม่จำเป็นซึ่งมักทำให้ผู้ใช้รำคาญโดยไม่ต้องมีข้อกำหนดทางเทคนิค (หรือเชิงองค์กร) จริง
perdian

6
+1 - การตรวจสอบหมายเลขโทรศัพท์ (โดยเฉพาะอย่างยิ่งการกำหนดนี้ในวงกว้าง) มักจะไม่มีจุดหมายไม่เป็นหลักฐานในอนาคต (KL5-6743 เคยเป็นหมายเลขโทรศัพท์ที่ถูกต้องเช่น) และทำให้ผู้ใช้ที่มีกรณีพิเศษรำคาญ ทำให้หมายเลขโทรศัพท์ของคุณเป็นฟิลด์ข้อความขนาดใหญ่และให้ผู้โทรอัตโนมัติ (หากมีในสถานการณ์นี้) แยกวิเคราะห์สิ่งที่พวกเขาสามารถทำได้ ข้อยกเว้นสามารถยกให้กับมนุษย์ที่สามารถจัดการกับสถานการณ์ได้อย่างเหมาะสม
EZ Hart

8
+1 และที่สำคัญที่สุดเพียงเพราะหมายเลขโทรศัพท์นั้นถูกต้อง แต่ก็ไม่ได้หมายความว่ามันมีอยู่และแม้ว่าจะมีอยู่ก็ไม่ได้หมายความว่ามันจะเป็นของคนที่มีปัญหา ...
Benjol

โอ้ใช่ฉันจะคิดออกประเทศที่ผู้ใช้รายใหญ่ของเราอาศัยอยู่จากนั้นฉันจะเขียนรหัสตรวจสอบ ขอบคุณทุกคนฉันให้ความสำคัญกับความพยายามของคุณ
แรนเจอร์

4
@ แรนเจอร์นั่นคือสิ่งที่ตรงกันข้ามกับสิ่งที่คำตอบคือการได้รับที่
Sebastian Redl

7

มันจะยากมากที่จะทราบว่าตัวเลขถูกต้องหรือไม่เนื่องจากประเทศต่าง ๆ มีรูปแบบที่แตกต่างกัน ในฝรั่งเศสตัวอย่างเช่น 06 12 34 56 78 เป็นหมายเลขโทรศัพท์ที่ถูกต้องในขณะที่ 00 12 34 56 78 ไม่ได้เนื่องจากหมายเลขสามารถเริ่มต้นได้ตั้งแต่ 01 ถึง 09, 06 และ 07 เป็นโทรศัพท์มือถือ

นอกจากนี้หมายเลขโทรศัพท์สามารถเขียนได้หลายรูปแบบแม้ในประเทศเดียวกัน ฉันเคยเห็น:

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

สองคนสุดท้ายเป็นรูปแบบสากล

โดยทั่วไป:

  1. อนุญาตให้ใช้เครื่องหมายวงเล็บ+สัญลักษณ์เป็นอักขระนำหน้าขีดกลางจุดเครื่องหมายจุลภาคและเว้นวรรคเท่านั้น
  2. หากเป็นไปได้โปรดจำเฉพาะแบบฟอร์มปกติ (เช่น +33 (0) 612345678)
  3. หากเป็นไปไม่ได้ให้ลบตัวคั่นอย่างน้อย (เช่นช่องว่าง)

ไม่แนะนำให้มีการตรวจสอบความถูกต้องต่อประเทศมากเกินไป ไม่เพียง แต่มีกฎจำนวนมาก แต่ยังเปลี่ยนกฎ ตัวอย่างเช่นในประเทศฝรั่งเศสเมื่อไม่กี่ปีที่ผ่านมาไม่มีหมายเลขโทรศัพท์เริ่มต้นที่ 07 หรือ 09 ด้วยจำนวนที่เพิ่มขึ้นของโทรศัพท์มือถือปรากฏขึ้น 07 ด้วยบริการ VoIP ปรากฏขึ้น 09

คุณอาจใช้หมายเลขพิเศษของบัญชี ตัวอย่างเช่น 3635 เป็นตัวเลขที่ถูกต้องในประเทศฝรั่งเศสแม้ว่าจะมีเพียงสี่หลักและเริ่มต้นด้วยไม่ใช่ศูนย์


1
มันจะช่วยแสดงการใช้วงเล็บในตัวอย่างของคุณ หมายเลขระหว่างประเทศมักใช้หมายเลขเหล่านี้เพื่อใส่เลขศูนย์นำหน้าของรหัสพื้นที่เพื่อระบุว่าคุณไม่ต้องหมุนหมายเลขเมื่อโทรจากต่างประเทศ เช่น+31 (0)30 1234567ที่ 31 คือเนเธอร์แลนด์ 030 เป็นรหัสพื้นที่และ 1234567 เป็นสมาชิก
Marjan Venema

2
อย่าลืมฟิลด์ตัวเลือกสำหรับรหัสส่วนขยาย (ซึ่งอาจต้องอนุญาตให้ใช้คีย์ปอนด์หรือดอกจัน)

@MarjanVenema ฉันไม่ได้โทรออกต่างประเทศเท่าไหร่ แต่เป็นมาตรฐานที่จะเพิ่มศูนย์และเพิ่มเครื่องหมายวงเล็บ (0) เพื่อบอกว่าคุณไม่โทรออก มันจะง่ายกว่าไหมถ้าจะละทิ้ง 0 ทั้งหมดไปด้วย?
CaffGeek

@Chad: ไม่ มันบอกผู้ใช้ต่างประเทศที่พวกเขาต้องการที่จะออกมันและบอกผู้ใช้ระดับชาติที่พวกเขาต้องการที่จะใช้มัน ไม่ใช่ทุกประเทศที่มีรหัสพื้นที่เริ่มต้นด้วยศูนย์ การทำเช่นนี้ช่วยให้มั่นใจได้ว่าเมื่อมีคนเห็นหมายเลขพวกเขารู้ว่าจะต้องทำอย่างไรเมื่อพวกเขาอยู่ในและเมื่อพวกเขาอยู่นอกประเทศ ไม่ใช่ทุกคนที่เรียกประเทศชาติว่าจะต้องมีถิ่นที่อยู่หลังจากทั้งหมด ...
Marjan Venema

@MarjanVenema โอ้ฉันเข้าใจแล้วไม่ได้ตระหนักถึงผู้ใช้ระดับชาติที่ต้องการมันเรียนรู้สิ่งใหม่วันนี้
CaffGeek

3

อย่า จำกัด ตัวละคร นำทุกสิ่งที่เขาให้มา แต่เมื่อคุณหมุนมันใช้เฉพาะตัวเลขเท่านั้น แม้มันอาจทำงานผิดปกติ ฉันอยู่ในประเทศไทยหนึ่งปีก่อนที่ฉันจะได้เรียนรู้ว่า 123-4567-9 ไม่ได้หมายถึงการขยาย แต่เป็นช่วงของตัวเลข 1234567 ถึง 1234569 เมื่อฉันหมุนหมายเลข "12345679" มันทำงานได้เพราะ บริษัท โทรศัพท์ไม่สนใจตัวเลขพิเศษ ทำทุกอย่างเพียงหมุนหมายเลข

ฉันชอบที่โทรศัพท์ใหม่ของฉันอนุญาตให้มีช่องว่างในหมายเลขโทรศัพท์ ฉันสามารถป้อน "123 456 7890" แบบนั้นไม่ใช่บดทั้งหมดเข้าด้วยกัน


2
100 ไม่มีอะไรเลวร้ายไปกว่าคอมพิวเตอร์ที่พูดว่า "โปรดลบ - จากหมายเลข" ราวกับว่าคอมพิวเตอร์ไม่มีเงื่อนงำวิธีการทำด้วยตัวเอง เช่นเดียวกับหมายเลขบัตรเครดิต FWIW
Bryan Oakley

0

วงเล็บเหลี่ยมเส้นประและช่องว่าง

เมื่อผู้ใช้ป้อนหมายเลขโทรศัพท์ที่มีสัญลักษณ์เหล่านั้นคุณสามารถตรวจสอบพวกเขาตามกฎเฉพาะของประเทศ (ซึ่งคุณจะต้องรวบรวมกฎเหล่านั้นสำหรับแต่ละประเทศ) จากนั้นตัวเลขที่ไม่ใช่ตัวเลขสามารถลดลงได้เมื่อมัน ประมวลผลภายในซอฟต์แวร์ของคุณ

นี่เป็นเพราะ IDD (การโทรทางไกลระหว่างประเทศ) ทำให้ไม่สามารถใช้ "อักขระพิเศษ" ใด ๆ เพื่อใช้ในการโทรหมายเลขได้ยกเว้นการหยุดชั่วคราวในการกดตัวเลข

(ฉันไม่มีความรู้ในเรื่องนี้เลยโปรดแก้ไขฉันหากฉันผิด)


3
คุณลืมเครื่องหมาย \ + สำหรับการเข้าถึงระหว่างประเทศ
Marjan Venema

2
อนุญาตให้ใช้ตัวอักษร x เช่นกัน - อย่างน้อยในสหรัฐอเมริกาเป็นเรื่องปกติที่จะใส่ส่วนขยายด้วย x (เช่น: 555-1212 x123)
Bryan Oakley

0

สิ่งเดียวที่ควรตรวจสอบความถูกต้องคือจำนวนหลัก - มันตรงกับสิ่งที่คุณจะต้องโทร?

รหัสการเข้าถึงสามารถ / ไม่ควรได้รับอนุญาตให้ป้อนโดยผู้ใช้ (เช่น +1 สำหรับสหรัฐอเมริกา) ฉันจะบอกคุณว่าทำไม - ถ้าเป็นคนอเมริกันที่เข้ามาและพวกเขาไม่ใช่คนที่ฉลาดพวกเขาอาจต้องการป้อน 001 แทนที่จะเป็น 1 ด้วยเหตุผลที่ว่า 00 คือวิธีที่คุณเข้าถึงหมายเลขระหว่างประเทศจากภายในสหรัฐอเมริกา พวกเขาไม่รู้ว่าความแตกต่างระหว่างนั้นกับอะไรเพียง +1 หากคุณโทรหาโทรศัพท์บ้านระหว่างรหัสพื้นที่ (และบางครั้งอยู่ในรหัสพื้นที่เดียวกัน) คุณจะต้องป้อน 1 ก่อนหมายเลขนั้น เช่นเดียวกับญี่ปุ่น

นำประเทศญี่ปุ่น มีการเข้าถึงสายที่ดินของจังหวัดด้วย 0 ที่ด้านหน้าของพวกเขา แต่ถ้าคุณโทรจากนอกประเทศญี่ปุ่นคุณไม่จำเป็นต้องมีเลข 0

หมายเลขโทรศัพท์มือถือในจีนคือ 10 หลักและในฮ่องกงคือ 8 ถ้าแบบฟอร์มของคุณจับประเทศคุณไม่ต้องขอรหัสประเทศตอนต้นของตัวเลข - เพียงแสดงอัตโนมัติในข้อความแบบอ่านอย่างเดียวถัดจาก จำนวนที่พวกเขาต้องป้อน

รายการดำเนินต่อไป

เพียงตรวจสอบจำนวนหลัก (ตรวจสอบให้แน่ใจว่าไม่ได้รับจดหมาย) และทำให้ผู้ใช้ปลายทางป้อนจำนวนหลักที่ถูกต้องได้ง่าย นั่นคือพวกเขาไม่ควรป้อนรหัสประเทศและหากแบบฟอร์มของคุณฉลาดมากพวกเขาอาจไม่จำเป็นต้องป้อนรหัสพื้นที่หากเป็นหมายเลขโทรศัพท์พื้นฐาน หรือหากพวกเขาเริ่มป้อนสิ่งต่าง ๆ เช่นรหัสการเข้าถึงเช่น 0 หน้าหมายเลขญี่ปุ่นให้แจ้งให้ทราบว่าไม่จำเป็น

อักขระอื่น ๆ นอกเหนือจากตัวเลขควรเป็นจุดที่สงสัย - พวกเขาไม่มีโอกาสเข้ามา


1
ฉันไม่เห็นด้วยที่จะทำให้แน่ใจว่าไม่ได้รับจดหมายตอบรับ - ไปข้างหน้าและยอมรับจากนั้นก็เพิกเฉยต่อมัน คนทั่วไปเขียนส่วนขยายด้วย "x" นำหน้า (เช่น: 555-1212 x123) ทำไมไม่อนุญาต มนุษย์สามารถแยกวิเคราะห์ได้ดีและถ้าคอมพิวเตอร์จำเป็นต้องใช้มันสามารถแยกตัวเลขที่ไม่ใช่ตัวเลขออกมาได้เล็กน้อย
ไบรอัน Oakley

0

Google มี lib สำหรับสิ่งนี้:

ห้องสมุด Java, C ++ และ JavaScript ที่ใช้กันทั่วไปของ Google สำหรับการแยกวิเคราะห์จัดรูปแบบและตรวจสอบหมายเลขโทรศัพท์ต่างประเทศ

https://github.com/googlei18n/libphonenumber

มันจะพยายามอย่างดีที่สุดฉันคิดว่าจะต้องมีกรณีที่ไม่ได้รับการจัดการเพราะนี่ไม่ใช่เรื่องง่าย อนุญาตให้ผู้ใช้ป้อนหมายเลขและตัวอักษรลบตัวอักษรในภายหลังด้วยรหัส

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.