PHP: Ne kadar iyi oluşturulmuş, bir telefon numarasını doğrulamak için?

6 Cevap php

Bir telefon # iyi oluşturulduğu takdirde PHP kullanarak, nasıl kontrol edebilirim?

Sadece numaralarını bırakarak, sadece tüm sayısal olmayan veri şerit için kolay görünüyor. 10 basamaklı varsa daha sonra kontrol etmek.

Bu en iyi ve en kolay yolu nedir?

6 Cevap

En iyi? Bu yaklaşım ile görmek No Sorunlar:

  • Bazı alan kodları - 000 gibi - # # # - # # # # - geçerli değildir. Bkz http://en.wikipedia.org/wiki/List_of_NANP_area_codes
  • Bazı borsaları - # # # # - - # # # -555 gibi geçerli değildir. Bkz http://en.wikipedia.org/wiki/555_%28teletelefon_number%29
  • # # # - - # # # - # # # # Bazı insanlar sayısına, yani 1 önce 1 girecek.
  • # # # - - # # # # X # # # # Bazı insanlar # # # gibi, bir uzantısı sadece ulaşılabilir.
  • Bazı şirketler 1-800-GO-FLOWERS gibi, fazladan basamak çakmak. Ek rakam sadece telefon sistemi tarafından göz ardı edilir, ancak bir kullanıcı şeyi girmek mümkün olacak bekleyebilirsiniz.
  • Uluslararası telefon numaraları ülke kodları indirim bile, mutlaka 10 basamaklı değildir.

Yeterince iyi mi? Büyük olasılıkla, ama bu sizin ve app kalmış.

Bunun için bir regex kullanabilirsiniz:

$pattern_phone = "|^[0-9\+][0-9\s+\-]*$|i";
if(!preg_match($pattern_phone,$phone)){
    //Somethings wrong
}

Regex test değil, bu yüzden% 100 doğru olmayabilir.

Sıyırma sonra 10 basamak denetleme sözdizimi kontrol eder ama geçerliliğini kontrol etmez. Bunun için geçerli numaraları bölge / ülke mevcuttur belirlemek ve muhtemelen desenleri uyacak şekilde bir regex yazmanız gerekir.

Böyle / filtreleme veri doğrulama ile sorun genellikle bu sorunun cevabını aşağı gelir: "Ben nasıl sıkı olmak istiyoruz" ardından "özelliği" bir dizi soru haline devrettiği

  • Eğer uluslararası numaralarını kabul edecek misiniz?
  • Eğer uzantıları kabul edecek mi?
  • Eğer izin gidiyor çeşitli biçimleri, yani, (111) 222-3333 vs 111.222.3333

Sizin iş kurallarına bağlı olarak, bu soruların cevapları değişebilir. Ama en esnek olması, ben bir telefon numarası almak için 3 alanları tavsiye

  1. Ülke Kodu (isteğe bağlı)
  2. Telefon Numarası
  3. Uzatma (isteğe bağlı)

Her 3 alanlar programlı sadece sayısal değerler için / filtreleri sınırlı olabilir. Daha sonra bazı ayrıştırma mümkün biçime saklamadan önce bunları birleştirmek, ya da tek tek her değer saklayabilir.

Bir şey (kendi soruyu cevaplarken sensin sürece) yapmak için "iyi" bir şey, neredeyse imkansız ise cevaplama.

Sizin gibi bir dize için istenmeyen davranışlara neden olabilir, 10 basamaklı olup olmadığını kontrol sonra tüm non-basamak sıyırma, o teklif ve yol:

George Washington (February 22, 1732 – December 14, '99) was the commander of the Continental Army in the American Revolutionary War and served as the first President of the United States of America.

olmayan tüm hanelere sıyırma 10 fdigits uzun 2217321499 dize neden, ama çok tüm dize geçerli bir telefon numarası olarak kabul edilmelidir şüpheliyim çünkü.

İhtiyacınız ne biçim? Bu düzenli ifadeleri kullanabilirsiniz.