Telefon numaraları için preg_match kullanarak Yardım

2 Cevap php

nasıl i telefon numaralarını bulmak ve bir değişkene bunları saklamak istiyorsunuz eğer bir açıklama yazmak istiyorum. İşte ben şimdiye kadar ama onun değil çalışma ne var.

if (preg_match('/^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$
/', $buffer, $matches))
{
    $phonenumber = html_entity_decode($matches[1]);         
}

2 Cevap

Eğer preg_match() kullanıyorsanız bu yana, ben PHP kullanarak kabul edeceğiz. Çünkü bile N.Am. kendi değişkenlik telefon numaraları için (11,10 veya 7 hane, değişen veya hiç ayıran karakter, vb) bir regex daha uğraşmak kolay bu gibi bir işlevi olabilir:

function validphone(&$value) { //test for N.Am. phone number and reformat in standard format
    $valid=false;
    $area=NULL;
    $working=preg_replace('/\D/', '', $value); //only numbers left, no preceding zeros
    switch (strlen($working)) { //cases fall through from 11 to 7
        case 11: //e.g. 19024355764
            $working=stristr($working,'1'); //trims off 1st 1
        case 10: //e.g. 9024355764
            $area=substr($working,0,-7);
            $working=substr($working,3); //trims off 1st 3
        case 7: //e.g. 4355764
            $value=implode('-',array($area,substr($working,0,-4),substr($working,-4)));
            $valid=true;
            break;
        default:
            $valid=false;
            break;
    }
    return $valid;

}

ETA yorum sizin sorular:

Bir telefon numarası olmalıdır bir dize var

$phonish='blahblah#._foo(123)4567890 ixlybob';
if(validphone($phonish)){ //function checks if $phonish is valid & reformats it in a standard way
  //do something with $phonish, which now equals '123-456-7890'
} else {
  echo 'not a valid phone number';
}

validphone() function telefon numaraları olması bekleniyor shortish dizeleri için en uygun olduğunu. Eğer bir dizeye bütün bir sayfa dökümünü ve ardından validphone($mywholepage), bu seferde dize all numaralar çıkartacaktır onu beslemek eğer. Yani birden fazla telefon numaraları ile metin yanlış ve dağılmış 11,10 ya da 7 basamak doğru dönecektir sahip olur metin dönecektir.

Başlangıçta, opsiyonel +1 için arama ve bazı açgözlü dize. Değişen

(?:[.-]\s*)?

karşı

(?:[.-]\d*?)?

hile yapmak, ama belki regex daha sorunlar var olmalıdır.