Telefon Numarası için hangi Özel karakterler kullanılmalıdır?


20

Bu nedenle, küresel kullanıcılar için kullanılacak bir web sayfası tasarlıyorum, Kanada, ABD, Hindistan, İngiltere vb. .

Düşünebileceğim bazı geçerli biçimler şunlardır:

  1. 1800123456 (Hindistan)
  2. ABD telefon numaralarında "-" kullanımı

Bir kullanıcının hangi özel karakterleri girmesine izin vermem gerektiği konusunda biraz kafam karıştı (örn. - / ()). Diğerleri geçmişte bunu nasıl çözdü?


1
Harflerle ifade edilen telefon numaralarına ne dersiniz, örneğin, 0800DIALTHIS?
mouviciel

3
Neyi önlemeye çalışıyorsunuz? Kullanıcı yalan mı söylüyor? Kullanıcı numaralarını bilmeni istemiyor mu? Kullanıcı bir şey girmek için çok tembel mi? Yazım hatası yapan kullanıcı?
Benjol

@ mouviviel: evet ben de düşünmek gerekir bu yüzden bir kerede bir değerleme senaryosu alıyorum hakkında düşünmek gerekir.
Korucu

@Benjol: Bu uygulama ticari bir olduğunu bu yüzden müşterilerimize bir kullanıcı doğru bir sayı gireceğini biliyorum ama o / değil eğer risk edemez. Değerleme, yalnızca yazım hatalarını değil, uygulamayı da kaydettikleri için oldukça önemlidir. DB'min gereksiz gereksizlerle dolu olmasını istemiyorum.
Korucu

5
e-posta adreslerini doğrulamak için ne yapıyorsun? Neredeyse tüm web sitelerinin "gerçek hayat" doğrulaması yaptığını (yani size bir posta göndererek) gözlemleyeceksiniz. Telefon numarası bu kadar önemli olursa, eşdeğer bir şey yapmanız gerektiğini düşünüyorum.
Benjol

Yanıtlar:


21

Eğer sırf olabilir (eğer yazma koduna, bir programcı olarak, için para alıyorsun o) bir şeyi sınırlamak, bu gerçekten bunu gerektiği anlamına gelmez.

Bir sayıyı onaylamanın anlamı nedir? Neden faydalı? Bir kullanıcı "0800DIALTHIS" veya "私 は 電話 番号 を 持 っ い な い" veya "(499) 123-45-67 добавочный 4425" girerse başarısız olur mu? Kesinlikle ("küresel" diyorsun. Değil mi?), Kullanıcılar sadece onlarla telefonla nasıl iletişim kuracağına dair önemli bir bilgi vermek istediler.

Ayrıca, verilerin depolanma şekli, kullanılma şekline göre yönetilmelidir. Sayıları nasıl kullanacaksınız? Otomatik olarak SMS spam göndermek için mi kullanılacaklar yoksa yöneticiler tarafından manuel olarak mı aranacaklar? Eğer ikinciyse, o zaman herhangi bir ek karaktere izin vermek iyidir, çünkü insan beyni onları en uygun gördükleri şekilde ayrıştırabilir; ve bu durumda, yalnızca insan kullanıcıları rahatsız edecek herhangi bir validasyona ihtiyacınız yoktur.


7
"Kullanıcılar sadece size önemli bir bilgi vermek istediler" için +1. Çok sık, herhangi bir teknik (veya organizasyonel) gereklilik olmadan kullanıcıyı rahatsız eden gereksiz doğrulama gördüm.
perdian

6
+1 - telefon numarası doğrulaması (özellikle bunu geniş olarak tanımlanır) genellikle anlamsızdır (geleceğe yönelik değildir (örneğin KL5-6743 geçerli bir telefon numarasıydı)) ve yalnızca özel durumları olan kullanıcıları rahatsız eder. Telefon numaralarınızı büyük bir metin alanı yapın ve otomatik çeviricilerin (bu senaryoda varsa) ne yapabileceklerini ayrıştırmasına izin verin. İstisnalar, durumu uygun bir şekilde ele alabilecek insanlara verilebilir.
EZ Hart

8
+1 ve en önemlisi, sadece bir telefon numarası geçerli olduğu için, var olduğu anlamına gelmez ve var olsa bile, söz konusu kişiye ait olduğu anlamına gelmez ...
Benjol

Oh evet, büyük kullanıcılarımızın yaşadığı ülkeleri bulacağım ve sonra bir doğrulama kodu yazacağım. Hepinize teşekkürler, çabalarınızı takdir ediyorum.
Korucu

4
@Ranger Bu sorunun cevabının tam tersi.
Sebastian Redl

7

Farklı ülkeler farklı biçimlere sahip olduğundan, bir sayının geçerli olup olmadığını bilmek çok zor olacaktır. Fransa'da, örneğin, 06 12 34 56 78 geçerli bir telefon numarası iken, 00 12 34 56 78 değildir, çünkü numara sadece 01 ila 09, 06 ve 07 cep telefonları olarak başlayabilir.

Ayrıca, telefon numaraları aynı ülkede bile çeşitli biçimlerde yazılabilir. Gördüm:

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

son ikisi uluslararası form.

Genel olarak:

  1. Köşeli parantezlere, +yalnızca öncü karakter, tire, nokta, virgül ve boşluk simgesi olarak izin verin .
  2. Mümkünse, sadece normalize edilmiş formu hatırlayın (yani +33 (0) 612345678).
  3. Bu mümkün değilse, en azından ayırıcı karakterleri (boşluklar gibi) kaldırın.

Her ülke için validasyona çok derinlemesine girilmesi önerilmez. Sadece büyük miktarda kural değil, aynı zamanda kurallar da değişir. Örneğin, Fransa'da, birkaç yıl önce 07 veya 09 ile başlayan hiçbir telefon numarası yoktu. Artan cep telefonu sayısı ile 07 ortaya çıktı. VoIP hizmetleri ile 09 ortaya çıktı.

Özel numaraları da hesaba katabilirsiniz. Örneğin, 3635 Fransa'da, yalnızca dört basamak içeriyor ve sıfırdan farklı olsa bile geçerli bir sayıdır.


1
Örneklerinizde köşeli parantez kullanımını göstermeniz yardımcı olacaktır. Uluslararası numaralar genellikle bunları, yurt dışından arama yaparken çevirmediğinizi belirtmek için alan kodunun baştaki sıfırını içine almak için kullanır. Örneğin +31 (0)30 123456731'in Hollanda olduğu, 030 alan kodunun ve 1234567'nin abone olduğu.
Marjan Venema

2
Uzantı kodu için isteğe bağlı bir alanı unutmayın (pound veya yıldız tuşuna izin vermesi gerekebilir).
rwong

@MarjanVenema, çok fazla uluslararası arama yapmıyorum, ancak sıfırı eklemek ve aramak istemediğinizi söylemek için parantez (0) eklemek standart mı? 0'ı tamamen dışarıda bırakmak daha kolay olmaz mıydı?
CaffGeek

@Chad: Hayır. Uluslararası kullanıcılara dışarıda bırakmaları gerektiğini söyler ve ulusal kullanıcılara kullanmaları gerektiğini söyler. Her ülkede sıfır ile başlayan alan kodu bulunmaz. Bu şekilde yapmak, birileri numarayı gördüğünde ülke içinde ve dışındayken ne yapacaklarını bilmelerini sağlar. Sonuçta, ulusal olarak arayan herkesin bir mukim olması
gerekmiyor

@ BremenanVenema, oh, anlıyorum, ulusal kullanıcıların ihtiyaç duyduğunu fark etmedi, bugün yeni bir şey öğrendi.
CaffGeek

3

Karakterleri kısıtlamayın; sana verdiği her şeyi al. Ama onu çevirirken sadece rakamları al. O zaman bile yanlış olabilir. 123-4567-9'un bir uzantı değil, 1234567'den 1234569'a kadar bir sayı anlamına geldiğini öğrenmeden bir yıl önce Tayland'daydım. "12345679" numarasını aradığımda çalıştı, çünkü telefon şirketi fazladan rakamı görmezden geldi. Bir şey al, sadece rakamları çevir.

Yeni telefonumun telefon numarasında boşluk bırakmasına bayılıyorum. Aynı şekilde "123 456 7890" girebilirim, hepsi birlikte ezilmemiş.


2
100. Bilgisayarın bunu nasıl yapacağına dair hiçbir fikri yokmuş gibi "lütfen numaradan - çıkarın" diyen daha kötü bir şey yoktur. Aynı kredi kartı numaraları için, FWIW.
Bryan Oakley

0

Köşeli ayraçlar, tire ve boşluk.

Kullanıcı bu sembolleri içeren telefon numarasını girdikten sonra, bunları ülkeye özgü kurallara göre doğrulayabilirsiniz (her ülke için bu kuralları toplamanız gerekir) ve ardından rakam olmayanlar gerçekten bırakılabilir yazılımınızda dahili olarak işlenir.

Bunun nedeni, IDD'nin (uluslararası doğrudan arama), rakamları delerken duraklamalar haricinde, herhangi bir "özel karakterin" gerçekte bir numarayı çevirmesini gerektirmesini imkansız kılmasıdır.

(Bu konuda hiçbir bilgim yok; lütfen yanılıyorsam beni düzeltin.)


3
Uluslararası erişim için \ + işaretini unutuyorsunuz
Marjan Venema

2
x harfine de izin verin - en azından ABD'de bir uzantının x ile ön eki eklemek yaygındır (örn: 555-1212 x123).
Bryan Oakley

0

Doğrulanması gereken tek şey basamak sayısıdır - aramanız gerekenle eşleşiyor mu?

Erişim kodlarının bir kullanıcı tarafından girilmesine izin verilmemelidir / verilmemelidir (ör. ABD için +1). Size nedenini anlatacağım - eğer bir Amerikan giriyorsa ve hepsi bu kadar anlayışlı değilse, muhtemelen 1 yerine 001 girmek isteyeceklerdir. Bununla sadece +1 arasındaki farkın ne olduğunu bilmiyorlar. Alan kodları (ve bazen aynı alan kodunda) arasındaki sabit hatları arıyorsanız, bu numaradan önce bir 1 de girersiniz. Tıpkı Japonya gibi.

Japonya'yı ele alalım. İl kara hatlarına önlerinde 0 ile erişilir. Ancak Japonya'nın dışından arama yapıyorsanız, 0'a ihtiyacınız yoktur.

Çin'deki cep numaraları 10 basamaklıdır ve Hong Kong'da 8'dir. Formunuz ülkeyi ele geçiriyorsa, numaranın başında ülke kodunu bile sormayın - hemen yanındaki salt okunur metinde otomatik olarak göster girmeleri gereken sayı.

Liste devam ediyor.

Sadece rakam sayısını doğrulayın (hiçbir harf kabul edilmediğinden emin olun) ve son kullanıcının doğru sayıda rakam girmesini kolaylaştırın. Yani ülke kodunu girmek zorunda kalmamalılar ve formunuz çok akıllıysa, bir sabit hat numarasıysa alan kodunu bile girmeleri gerekmeyebilir. Veya bir Japon numarasının önünde 0 gibi bir erişim kodu gibi şeyler girmeye başlarlarsa, gerekmediklerini bilmelerini sağlayın.

Diğer her karakter, rakamların yanı sıra, tartışmalı bir nokta olmalıdır - bunlara girme şansları yoktur.


1
Hiçbir mektubun kabul edilmediğinden emin değilim - devam edin ve kabul edin, sonra onları görmezden gelin. İnsanlar doğal olarak önde gelen "x" ile uzantılar yazarlar (örneğin: 555-1212 x123). Neden buna izin vermiyorsun? İnsanlar bunu iyi bir şekilde ayrıştırabilir ve bilgisayarın kullanması gerekiyorsa, basamak olmayan sayıları önemsiz bir şekilde çıkarabilir.
Bryan Oakley

0

Google bunun için bir lib'a sahiptir:

Google'ın uluslararası telefon numaralarını ayrıştırmak, biçimlendirmek ve doğrulamak için ortak Java, C ++ ve JavaScript kitaplığı.

https://github.com/googlei18n/libphonenumber

En iyi çabayı gösteriyor, bence bu kolay bir iş olmadığı için ele alınmayan davalar olmalı. Kullanıcıların sayı ve harf girmesine izin verin, harfleri daha sonra kodla kaldırın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.