Solusi di atas lebih unggul, terutama jika menggunakan Java, dan menemukan lebih banyak nomor dengan lebih dari 10 digit seperti awalan kode internasional atau nomor ekstensi tambahan. Solusi ini dasar (saya seorang pemula di dunia regex) dan dirancang dengan nomor Telepon AS dan hanya berguna untuk string dengan hanya 10 angka dengan mungkin beberapa karakter pemformatan, atau mungkin tanpa karakter pemformatan sama sekali (hanya 10 angka ). Karena itu, saya akan merekomendasikan solusi ini hanya untuk aplikasi semi-otomatis. Secara pribadi saya lebih suka menyimpan nomor hanya sebagai 10 angka tanpa memformat karakter, tetapi juga ingin dapat mengubah atau membersihkan nomor telepon ke format standar orang normal dan aplikasi / telepon akan langsung mengenali sesuka hati.
Saya menemukan posting ini mencari sesuatu yang dapat saya gunakan dengan aplikasi pembersih teks yang memiliki kemampuan PCRE Regex (tetapi tidak ada fungsi java). Saya akan memposting ini di sini untuk orang-orang yang dapat menggunakan solusi Regex murni sederhana yang dapat bekerja di berbagai editor teks, pembersih, ekspander, atau bahkan beberapa manajer papan klip. Saya pribadi menggunakan Sublime dan TextSoap. Solusi ini dibuat untuk Text Soap karena ada di bilah menu dan menyediakan menu drop-down di mana Anda dapat memicu tindakan manipulasi teks pada apa yang dipilih oleh kursor atau apa yang ada di clipboard.
Pendekatan saya pada dasarnya adalah dua substitusi / cari dan ganti regex. Setiap pencarian dan penggantian substitusi melibatkan dua ekspresi reguler, satu untuk pencarian dan satu untuk mengganti.
Pergantian / Pencarian & Ganti # 1
- Substitusi pertama / cari & ganti strip nomor non-numerik dari angka 10-digit sebaliknya ke string 10-digit.
Pergantian Pertama / Pencarian Regex:\D
- String pencarian ini cocok dengan semua karakter yang bukan digit.
Substitusi Pertama / Ganti Ekspresi Reguler: "" (tidak ada, bahkan spasi)
- Biarkan bidang pengganti benar-benar kosong, tidak boleh ada spasi kosong termasuk spasi. Ini akan mengakibatkan semua karakter non-digit yang cocok dihapus. Anda seharusnya sudah masuk dengan 10 digit + karakter pemformatan sebelum operasi ini dan keluar dengan 10 digit tanpa karakter pemformatan.
Pergantian / Pencarian & Ganti # 2
- Substitusi kedua / cari dan ganti bagian pencarian dari operasi menangkap grup untuk kode area
$1
, grup tangkapan untuk set kedua dari tiga angka $2
, dan grup tangkapan terakhir untuk set terakhir dari empat angka $3
. Ekspresi reguler untuk bagian pengganti operasi memasukkan format nomor telepon AS di antara kelompok digit yang diambil.
Pergantian Kedua / Pencarian Regex:(\d{3})(\d{3})(\d{4})
Substitusi Kedua / Replace Regex:\($1\) $2\-$3
Backslash \
lolos karakter khusus (
, )
,
(<-whitespace), dan -
karena kita memasukkan mereka antara nomor kami ditangkap di kelompok capture $1
, $2
, & $3
untuk tujuan nomor telepon format AS.
Di TextSoap saya membuat pembersih khusus yang menyertakan dua tindakan operasi substitusi, jadi dalam praktiknya ini terasa identik dengan menjalankan skrip. Saya yakin solusi ini dapat ditingkatkan tetapi saya mengharapkan kerumitan meningkat sedikit. Versi perbaikan dari solusi ini disambut sebagai pengalaman belajar jika ada yang ingin menambahkannya.