Saya sedang mengerjakan aplikasi SMS dan harus dapat mengonversi nomor telepon pengirim dari +11234567890 menjadi 123-456-7890 sehingga dapat dibandingkan dengan catatan dalam database MySQL .
Angka-angka disimpan dalam format terakhir untuk digunakan di tempat lain di situs dan saya lebih suka tidak mengubah format itu karena akan memerlukan banyak modifikasi kode.
Bagaimana saya melakukan ini dengan PHP?
Terima kasih!
php
phone-number
NightMICU
sumber
sumber
Jawaban:
sumber
sprintf
atau `` printf``? Seseorang tolong jelaskan padaku. Saya bekerja dengan nomor telepon khusus AS dan tidak berpikir menjalankannya melalui fungsi keluaran menggunakan substring adalah metode terbaik.Ini adalah formatter telepon AS yang bekerja pada lebih banyak versi nomor daripada jawaban saat ini.
Dan berikut adalah rincian regex:
Diperbarui: 11 Maret 2015 untuk digunakan
{0,7}
sebagai pengganti{,7}
sumber
~.*(\d{3})[^\d]*(\d{3})[^\d]*(\d{4})(?:[ \D#\-]*(\d{3,6}))?.*~
.(\d{3}) // 3 digits
[\d]
// karakter yang bukan digit{,7}
harus diperbarui{0,7}
. Saya telah memperbarui kodenya.Fungsi ini akan memformat nomor telepon internasional (10+ digit), non-internasional (10 digit) atau sekolah lama (7 digit). Angka apa pun selain 10+, 10 atau 7 digit akan tetap tidak diformat.
sumber
Dengan asumsi bahwa nomor telepon Anda selalu memiliki format yang persis seperti ini, Anda dapat menggunakan cuplikan ini:
sumber
Nomor telepon sulit. Untuk solusi internasional yang lebih kuat, saya akan merekomendasikan port PHP libphonenumber Google yang terpelihara dengan baik ini perpustakaan .
Menggunakannya seperti ini,
Anda akan mendapatkan output berikut:
Saya akan merekomendasikan menggunakan
E164
format untuk pemeriksaan duplikat. Anda juga dapat memeriksa apakah nomor tersebut benar-benar nomor ponsel (menggunakanPhoneNumberUtil::getNumberType()
), atau apakah itu bahkan nomor AS (menggunakanPhoneNumberUtil::getRegionCodeForNumber()
).Sebagai bonus, perpustakaan dapat menangani hampir semua masukan. Jika Anda, misalnya, memilih untuk menjalankan
1-800-JETBLUE
kode di atas, Anda akan mendapatkanNeato.
Ini bekerja dengan baik untuk negara selain AS. Cukup gunakan kode negara ISO lain dalam
parse()
argumen.sumber
number_formatted
kolom di database saya dan memasukkan nomor yang diformat secara manual. Masih menggunakanlibphonenumber
secara lokal untuk menghasilkan angka yang diformat, tetapi termasuk perpustakaan besar untuk proyek kecil saya hanya berlebihan.Inilah solusi khusus AS saya, dengan kode area sebagai komponen opsional, pembatas yang diperlukan untuk ekstensi, dan komentar regex:
Dan inilah script untuk mengujinya:
sumber
Berikut adalah fungsi sederhana untuk memformat nomor telepon dengan 7 hingga 10 digit dengan cara yang lebih Eropa (atau Swedia?):
sumber
Jangan menemukan kembali roda! Impor perpustakaan luar biasa ini:
https://github.com/giggsey/libphonenumber-for-php
Ini didasarkan pada perpustakaan Google untuk mengurai, memformat, dan memvalidasi nomor telepon internasional: https://github.com/google/libphonenumber
sumber
Saya melihat ini mungkin menggunakan beberapa regex, atau beberapa panggilan substr (dengan asumsi input selalu dalam format itu, dan tidak berubah panjang, dll.)
sesuatu seperti
harus melakukannya.
sumber
Ini lebih cepat dari RegEx.
sumber
Cobalah sesuatu seperti:
ini akan membutuhkan $ sejumlah
8881112222
dan dikonversi ke888-111-2222
. Semoga ini membantu.sumber
'.'
juga harus diperbarui ke'-'
, atau dihapus. Itu disertakan karena kasus penggunaan tertentu yang dihadapi - dengan sedikit usaha Anda dapat mengubahnya menjadipreg_replace('/\d{3}/', '$0-', substr($number, 2))
dan menjawab pertanyaan secara langsung.Pilihan lain - mudah diperbarui untuk menerima format dari konfigurasi.
sumber
Semua,
Saya pikir saya memperbaikinya. Bekerja untuk file masukan saat ini dan memiliki 2 fungsi berikut untuk menyelesaikannya!
function format_phone_number:
function validate_phone_number:
Perhatikan saya memiliki ini di lib kelas, jadi dengan demikian panggilan "self :: validate_phone_number" dari fungsi / metode pertama.
Perhatikan baris # 32 dari fungsi "validate_phone_number" tempat saya menambahkan:
untuk mendapatkan saya pengembalian palsu diperlukan jika bukan nomor telepon yang valid.
Masih perlu menguji ini terhadap lebih banyak data, tetapi mengerjakan data saat ini, dengan format saat ini dan saya menggunakan gaya '8' untuk kumpulan data khusus ini.
Juga saya mengomentari logika "ekstensi" karena saya terus-menerus mendapatkan kesalahan darinya, karena saya tidak memiliki info itu di data saya.
sumber
ini membutuhkan 7, 10 dan 11 digit, menghapus karakter tambahan dan menambahkan tanda hubung dengan pergi dari kanan ke kiri melalui string. ubah tanda hubung menjadi spasi atau titik.
sumber
Saya tahu OP meminta format 123-456-7890, tetapi, berdasarkan jawaban John Dul , saya mengubahnya untuk mengembalikan nomor telepon dalam format tanda kurung, misalnya (123) 456-7890. Yang ini hanya menangani angka 7 dan 10 digit.
sumber
Ini pendapat saya:
The
sscanf
fungsi mengambil sebagai parameter kedua format string menceritakannya bagaimana menafsirkan karakter dari string pertama. Dalam kasus ini, itu berarti 2 karakter (%2c
), 3 karakter, 3 karakter, 4 karakter.Biasanya
sscanf
fungsi tersebut juga akan menyertakan variabel untuk menangkap data yang diekstraksi. Jika tidak, data dikembalikan dalam array yang telah saya panggil$parts
.The
print
pernyataan output string interpolasi.$part[0]
diabaikan.Saya telah menggunakan fungsi serupa untuk memformat nomor telepon Australia.
Perhatikan bahwa dari perspektif menyimpan nomor telepon:
sumber
Format Telepon Inggris Raya
Untuk aplikasi yang saya kembangkan, saya menemukan bahwa orang memasukkan nomor telepon mereka 'dengan benar' dari formulir yang dapat dibaca manusia, tetapi memasukkan berbagai karakter acak seperti '-' '/' '+44' dll. Masalahnya adalah aplikasi cloud itu yang perlu dibicarakan cukup spesifik tentang formatnya. Daripada menggunakan ekspresi reguler (bisa membuat frustasi bagi pengguna) saya membuat kelas objek yang memproses nomor yang dimasukkan ke dalam format yang benar sebelum diproses oleh modul ketekunan.
Format keluaran memastikan bahwa setiap perangkat lunak penerima menafsirkan keluaran sebagai teks daripada bilangan bulat (yang kemudian akan segera kehilangan nol di depan) dan formatnya konsisten dengan British Telecoms pedoman pemformatan angka - yang juga membantu daya ingat manusia dengan membagi bilangan panjang menjadi kelompok-kelompok kecil yang mudah diingat.
+441234567890 memproduksi (01234) 567 890
02012345678 memproduksi (020) 1234 5678
1923123456 memproduksi (01923 ) 123456 01923123456 memproduksi (01923)
123456 01923
halo ini teks123456 memproduksi (01923) 123 456
Signifikansi segmen pertukaran nomor - dalam tanda kurung - adalah bahwa di Inggris Raya, dan sebagian besar negara lain, panggilan antar nomor dalam pertukaran yang sama dapat dilakukan dengan mengabaikan segmen pertukaran. Ini tidak berlaku untuk nomor telepon seri 07, 08 dan 09.
Saya yakin ada solusi yang lebih efisien, tetapi yang ini terbukti sangat andal. Lebih banyak format dapat dengan mudah diakomodasi dengan menambahkan fungsi teleNum di bagian akhir.
Prosedur ini dipanggil dari skrip pemanggil
`
sumber
Ini untuk sambungan telepon rumah Inggris Raya tanpa Kode Negara
Hasil:
sumber
Silakan lihat fungsi berbasis substr yang dapat mengubah format
sumber
Periksa nomor telepon
sumber