Yukarıdaki çözümler, özellikle Java kullanılıyorsa ve uluslararası kod öneki veya ek dahili numaralar gibi 10'dan fazla basamaklı daha fazla sayı ile karşılaşıldığında üstündür. Bu çözüm basittir (normal ifade dünyasında yeni başlayan biriyim) ve ABD Telefon numaraları göz önünde bulundurularak tasarlandı ve yalnızca bazı biçimlendirme karakterleri içeren yalnızca 10 sayı içeren veya belki de hiç biçimlendirme karakteri olmayan (yalnızca 10 sayı ). Bu nedenle, bu çözümü yalnızca yarı otomatik uygulamalar için tavsiye ederim. Ben şahsen numaraları karakterleri biçimlendirmeden sadece 10 numara olarak saklamayı tercih ederim, ancak aynı zamanda telefon numaralarını normal insanların ve uygulamaların / telefonların anında tanıyacağı standart biçime dönüştürmek veya temizlemek istiyorum.
PCRE Regex özelliklerine sahip (ancak java işlevi olmayan) bir metin temizleyici uygulamasıyla kullanabileceğim bir şey arayan bu gönderiye rastladım. Bunu, çeşitli metin düzenleyiciler, temizleyiciler, genişleticiler ve hatta bazı pano yöneticilerinde çalışabilecek basit ve saf bir Regex çözümünü kullanabilecek kişiler için burada yayınlayacağım. Şahsen Sublime ve TextSoap kullanıyorum. Bu çözüm, menü çubuğunda bulunduğu için Metin Sabunu için yapılmıştır ve imleç tarafından seçilen veya panodaki öğeyle ilgili metin işleme eylemlerini tetikleyebileceğiniz bir açılır menü sağlar.
Benim yaklaşımım esasen iki ikame / arama ve normal ifadeleri değiştirmektir. Her ikame arama ve değiştirme, biri arama ve diğeri değiştirme için olmak üzere iki normal ifadeyi içerir.
Değiştirme / Ara ve Değiştir # 1
- İlk değiştirme / arama ve değiştirme, sayısal olmayan sayıları, aksi takdirde 10 basamaklı bir sayıdan 10 basamaklı bir dizeye kadar çıkarır.
İlk Değiştirme / Arama Normal İfadesi:\D
- Bu arama dizesi, rakam olmayan tüm karakterlerle eşleşir .
İlk Değiştirme / Regex'i Değiştir : "" (hiçbir şey, boşluk bile yok)
- Yedek alanı tamamen boş bırakın, boşluklar dahil beyaz boşluk olmamalıdır. Bu, tüm eşleşen rakam olmayan karakterlerin silinmesine neden olacaktır. Bu işlemden önce 10 hane + biçimlendirme karakterleri ile başlamalı ve 10 basamaklı sans biçimlendirme karakterleri ile çıkmalısınız.
Değiştirme / Ara ve Değiştir # 2
- İşlemin ikinci ikame / arama ve değiştirme arama kısmı, alan kodu için grupları
$1, ikinci üç sayı kümesi için bir yakalama grubunu $2ve son dört sayı kümesi için son yakalama grubunu yakalar $3. İşlemin ikame kısmı için normal ifade, yakalanan rakam grubu arasına ABD telefon numarası biçimlendirmesi ekler.
İkinci Değiştirme / Arama Normal İfadesi:(\d{3})(\d{3})(\d{4})
İkinci Değiştirme / Regex'i Değiştir :\($1\) $2\-$3
Ters eğik çizgi \özel karakterleri kaçar (, ), (<-whitespace) ve -biz yakalama gruplarında bizim yakalanan numaralar arasına takılarak beri $1, $2& $3ABD telefon numarası biçimlendirme amaçlı.
TextSoap'ta iki ikame işlemi eylemini içeren özel bir temizleyici oluşturdum, bu nedenle pratikte bir komut dosyasını çalıştırmakla aynı hissi veriyor. Eminim bu çözüm geliştirilebilir, ancak karmaşıklığın biraz artmasını bekliyorum. Bu çözümün geliştirilmiş bir versiyonu, buna eklemek isteyen biri varsa, bir öğrenme deneyimi olarak memnuniyetle karşılanmaktadır.