2010-06-22 18 views
38

Telefon numarasının php ile nasıl doğrulanır?Telefon numarasını PHP kullanarak nasıl doğrularsınız?

+1

Lütfen bir telefon numarası yapan nedir * geçerli *? – Gordon

+4

bu bir Avustralya telefon numarası, İngiltere numarası, uluslararası bir numara, vb, bu? Dünyanın dört bir yanından gelen telefon numaralarını doğrulamak, e-posta doğrulamadan daha fazla solucan açabilir - ve bunun hiç bir zaman% 100 hatasız olduğunu düşündüğümü sanmıyorum. – HorusKol

+0

İlgili: http://stackoverflow.com/questions/123559/a-comprehensive-regex-for-phone-number-validation –

cevap

16

Telefon numaralarının bir desteğe uygun olması gerektiğinden, girilen telefon numarasını regexp'de tanımladığınız desene göre eşleştirmek için normal ifadeler kullanabilirsiniz. php hem ereg hem de preg_match() işlevlerine sahiptir. Preg_match() öğesini bu normal ifade stili için daha fazla belge olduğu için kullanmanızı öneririm.

bir örnek

$phone = '000-0000-0000'; 

if(preg_match("/^[0-9]{3}-[0-9]{4}-[0-9]{4}$/", $phone)) { 
    // $phone is valid 
} 
+14

ve alan kodları etrafında parantez koyan insanlar? (202) 555 1212 – Mawg

+11

Belirli bir biçimlendirme kuralı zorlamak delidir. Ayrıca uluslararası arama öneklerini de kullanmanız gerekir. – Quentin

+3

Bu, preg_match'in ortasında bir {3} olmalıdır, değil mi? {4} değil. En azından ABD telefon numaraları için. –

13

Sana desteklemeyi amaçlayan ve nasıl sıkı numara gruplama, boşluk ve diğer ayırıcılar vb kullanılmasını zorunlu hale istediğiniz sayı biçimleri büyük ölçüde bağlıdır ....

Bazı fikirler edinmek için this similar question'a bir göz atın.

Sonra Burada geçerli 10 haneli ABD telefon numaralarını bulmak nasıl ITU-T

+2

artı e.164 için bir tane – Mawg

25

bir numaralandırma standart öneri olduğunu E.164 yoktur. Bu noktada, kullanıcının içeriğimi istediği varsayımıyla sayıların kendilerine güvenmesini sağlıyorum. Nihayetinde bir SMS mesajı gönderen bir uygulamada kullanıyorum, bu yüzden ham sayıları ne olursa olsun istiyorum. Biçimlendirme her zaman sonradan eklenebilir.

//eliminate every char except 0-9 
$justNums = preg_replace("/[^0-9]/", '', $string); 

//eliminate leading 1 if its there 
if (strlen($justNums) == 11) $justNums = preg_replace("/^1/", '',$justNums); 

//if we have 10 digits left, it's probably valid. 
if (strlen($justNums) == 10) $isPhoneNum = true; 

Düzenleme: Herhangi biri ilgilenirse, bunu Java'ya aktarmak zorunda kaldım. Her tuş vuruşuyla çalışır, bu yüzden onu oldukça açık tutmaya çalıştım:

boolean isPhoneNum = false; 
if (str.length() >= 10 && str.length() <= 14) { 
    //14: (###) ###-#### 
    //eliminate every char except 0-9 
    str = str.replaceAll("[^0-9]", ""); 

    //remove leading 1 if it's there 
    if (str.length() == 11) str = str.replaceAll("^1", ""); 

    isPhoneNum = str.length() == 10; 
} 
Log.d("ISPHONENUM", String.valueOf(isPhoneNum)); 
+2

ne girilirse girilen sayı +1981878978 – Bugfixer

+0

@Bugfixer Sadece uzunluk 11 ise baştaki 1'i kaldırır. – Staysee

+0

Bunu bazı değişiklikler ile kullanabilirdik. Cevabınızı doğrudan yaptığınız için teşekkür ederim. – Kray

İlgili konular