Biçimlendirme avustralya cep telefonu numaraları dizeleri

5 Cevap php

i need to format mobile numbers. e.g.

+61421 123 123
0421 123 123
0061421123123
0421 123123

1) dize bu tip içine dbf kaydetmek için

0421123123

2) sonra bu formatta görüntülemek

0421 123 123

sayıları biçimlendirmek için en etkili yol üzerinde herhangi bir öneri?

5 Cevap

  • giriş dizesi olmayan basamak kaldırmak
  • son 9 basamak dilim
  • , başına sıfır ve mağaza

Görüntülemek için:

  • boşluk eklemek uygun olduğu

Ya da belki sadece db içine zaten biçimlendirilmiş dize depolayabilir.

edit (yorumda soruyu yanıtlamak için). Bu sadece iyi bir iş yapmak gibi görünüyor:

$s = '421123123';
$formatted = '0'.chunk_split($s, 3, ' ');

İşte Avustralya cep telefonu numaraları için bazı geçerli formatları şunlardır:

  • 0401 123 234
  • 041 123 3456
  • 0412 23 23 34 (nadir)

Tüm bu yüzden boşlukları kaldırmak ve tüm basamak, basamak başlangıç ​​ve uzunluğu kontrol edebilir 04 ile başlayan 10 rakamdan oluşur ama daha uluslararası biçim telefon numaraları ile compliated alır. Bu, bu durumlarda ekler:

  • 61 411 234 345
  • +61 411 234 345
  • +61 (0) 411 234 345
  • vb

Sen önünde 00 dahil olabilir, ancak bu sadece bir uluslararası arama öneki olarak 00 kullanmak bazı ülkelerde kullanılan olabilir. Ben İngiltere biri olduğuna inanıyorum. Yani zor parçaları:

  • Ülke kodu opsiyoneldir
  • Ülke kodu bir + öneki olabilir
  • Ülke kodu mevcut ise önde gelen 0 ile bırakılan veya değiştirilebilir (0)
  • Uluslararası arama öneki kullanılıyor olabilir
  • Rakam gruplarının Aralığı tutarsız
  • Nadir durumlarda tire yerine boşluk kullanılabilir

Ne suggestL olur

  1. Eğer varsa 00 lider soyun;
  2. Eğer varsa + lider soyun;
  3. Varsa 61 önde soyun;
  4. 0 (0) önde değiştirin;
  5. Biri zaten yoksa 0 önde ekleyin.
  6. Tüm tire ve boşlukları kaldırın.

Eğer sol değilseniz 04 ile başlayan 10 basamaklı reddetmek. Aksi halde, bu iki biçimlerden birinde biçimlendirmek:

  • Yurtiçi: 0412 345 789
  • Uluslararası: +61 (0) 412 345 789

İlk uzay alan kodundan sonra ve kalan iki bölüme eşit olarak bölünür ve böylece burada düzgün bir telefon numarasını biçimlendirmek olacak bir PHP fonksiyonu bulunuyor. Burada kod Fin AreaCodes için özeldir (ve dikkate ülke kodlarını sürmüyor) ama gerektiği gibi değiştirin:

// Formats 0451234567 => 045 1234 567
function format_phone($phone) {
    // List your area codes here
    $phone = preg_replace('/(02|03|05|06|08|09|013|014|015|016|017|018|019|020|040|041|042|043|044|045|046|050)/', '$1 ', $phone);
    list($d, $p) = explode(' ', $phone);
    $split_point = ceil(strlen($p) / 2);
    $p = substr($p, 0, $split_point).' '.substr($p, $split_point);
    return $d.' '.$p;
}

Veritabanı parçası içine tasarruf için, sadece belirli bir uzunlukta olmayan sayısal karakterler, substr şerit ve db içine yerleştirin. Ülkenizin telefon numaraları tüm benzer biçimlendirilmiş ve (önek 0 olmadan) 9 basamak uzun iseniz, sadece kullanarak telefon numarasından son 9 basamak alabilir:

$phone = substr($phone, strlen($phone) - 9):

Ve ön 0 ekleyin. Yani bu etkili 0 içine ülke kodunu döner ancak tüm telefon numaraları aynı uzunlukta ise yalnızca çalışır.

Regex için bu gerçekten uygun değildir. Nasıl hakkında (a) değil 10 karakter, (c) formatında alt dizeleri kullanılarak (b) reddetmek, sigara basamak kaldırın.

^(?:\+61|0061|0)(\d{3})\s*(\d{3})\s*(\d{3})$

Bu, herhangi bir düzenli ifade içinde, 123 421 geribaşvuru no.1 yakalama örneklerin herhangi eşleşir. 2 ve 123 no in. 3.

Yani yerine dize olarak 0\1\2\3 kullanırsanız, size 0421123123 almak ve kullanmak eğer 0\1 \2 \3, almak 0421 123 123.