it-swarm-tr.com

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

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ü?

21
Ranger

Sadece can bir şeyi kısıtladığınız için (bir programcı olarak kod yazmak için size ödenen şey budur), bu gerçekten yapmanız gerektiği anlamına gelmez.

Bir sayıyı doğrulamanı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 göndermek için kullanılacaklar mı? SMS spam — yoksa yöneticiler tarafından manuel olarak aranacaklar mı? Sonuncusu ise, ek karakterlere izin vermek iyidir, çünkü insan beyni şunları yapabilir: Onları en uygun gördükleri şekilde ayrıştırın ve bu durumda gerçekten insan kullanıcılarını rahatsız edecek herhangi bir doğrulamaya ihtiyacınız yoktur.

21
P Shved

Farklı ülkeler farklı biçimlere sahip olduğundan, bir sayının geçerli olup olmadığını bilmek çok zor olacaktır. Örneğin, Fransa'da 06 12 34 56 78 geçerli bir telefon numarası iken, 00 12 34 56 78 geçerli 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 izin ver, + simgesi yalnızca baş karakter, tire, nokta, virgül ve boşluk olarak gösterilir.
  2. Mümkünse, yalnızca normalleştirilmiş 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, 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.

7

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ş.

4
Andy Canfield

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 gayreti gösteriyor, bence bu kolay bir iş olmadığı için ele alınmayan davalar olmalı. Kullanıcıların sayıları ve harfleri girmesine izin verin, harfleri daha sonra kodla kaldırın.

1

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çekte 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.)

0
rwong

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 (yani ABD için +1). Size nedenini anlatacağım - eğer giren bir Amerikalı ise ve hepsi bu kadar anlayışlı değilse, muhtemelen 1 yerine 001 girmek isteyeceklerdir. Nedeni 00'ın ABD'den uluslararası bir numaraya nasıl eriştiğinizdir. Bu ve sadece +1 arasındaki farkın ne olduğunu bilmiyorlar. Alan kodları (ve bazen aynı alan kodunda) arasında sabit hatlar arıyorsanız, bu numaradan önce 1 değerini 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 girmeleri gerekmemelidir ve formunuz çok akıllıysa, bir sabit hat numarasıysa alan kodunu 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.

0
Todd Main