Nasıl bir telefon numarası içine 10 haneli bir dize biçimlendirmek?

5 Cevap php

Böyle 4085551234 gibi 10 karakter uzunluğunda dizeleri, şeklinde veritabanı kayıtları var.

Ben bu biçime bu biçimlendirmek isteyen: (408) 555-1234.

Ben bu ilgili regex olduğunu düşünüyorum. Ben programlama yeni ve tamamen kendi kendini yetiştirmiş buradayım, bu yüzden metin işleme gerçekleştirmek ilişkin kaynağın herhangi bir tür de duyacağız. Teşekkürler!

5 Cevap

Bir regex kesinlikle bu bir overkill. Eğer bir "telefon numarası" almak ve 10 haneli bunu normalleştirmek istiyorsa, bu bir regex için iyi bir kullanım olacaktır. Eğer soruyorsun ne yapmak, gibi bir şey:

echo "(".substr($data, 0, 3).") ".substr($data, 3, 3)."-".substr($data,6);

Zaten verileri bölmek için biliyorum bu yana, sadece substr veya istediğiniz parçalarını kapmak için benzer bir şey kullanabilirsiniz. RegEx her zaman sıkı bir biçimi yok dizelerinin eşleşmesi için yararlıdır. (Boşluk değişken numaralar gibi, değişken şeyler önce veya o ekstra çizgiler, vb sonra). Ama sizin durumunuzda giriş her zaman kesinlikle 10 basamak, başka hiçbir şey biçimlendirilir, böylece bunu biçimlendirmek için bir RegEx'in ekstra yükü gerekmez.

Burada bir göz atın: Format phone number

function format_phone($phone)
{
    $phone = preg_replace("/[^0-9]/", "", $phone);

    if(strlen($phone) == 7)
        return preg_replace("/([0-9]{3})([0-9]{4})/", "$1-$2", $phone);
    elseif(strlen($phone) == 10)
        return preg_replace("/([0-9]{3})([0-9]{3})([0-9]{4})/", "($1) $2-$3", $phone);
    else
        return $phone;
}

(...)(...)(....) (\1) \2-\3 ile değiştirin.

Herhalde ile gitmek istiyorum

$num = "4085551234";  // given                                                  
$formatted = "(".substr($num,0,3).") ".substr($num,3,3)."-".substr($num,6);

Regex Burada gerçekten uygun değildir.

Trivially gibi bir şey yapabilirsiniz:

\(\d\{3\}\)\(\d\{3\}\)\(\d\{4\}\)

3 alt grup ifadeler içine 10 basamak maç, ve sonra her bir alt grubunu kullanarak bunları yazdırmak için:

"(\1) \2-\3

Ancak pratikte serbest form verileri genellikle biraz yanıltıcıdır