
Bazı projelerde kullanıcıların telefon numarasını alırız ve hem düzgün görünmesi hem de kontrol amacıyla bu telefon numaralarını belirli bir formata çevirmeye ihtiyacımız vardır.
Bu yazıda regex kullanarak girilen numarayı nasıl telefon formatına [ 0 (###) ### ## ## ] dönüştüreceğimizden bahsedelim.
İlk olarak regex modülünü kullanmak için kodumuzun en başına “re” modülünü import ediyoruz.
Aşağıda sözde kod (Algoritma – Pseudocode) kısmını kontrol edebilirsiniz.
BAŞLA
1. Kullanıcıdan numara al → "numara"
2. EĞER numara boş ise:
YAZ "Boş giriş yaptınız"
BİTİR
3. "rakamlar" = numara içindeki RAKAM OLMAYAN tüm karakterleri sil
(boşluk, +, -, (, ) vb. silinir)
4. EĞER rakamlar "90" ile başlıyor VE uzunluğu 12 ise:
rakamlar = rakamlar[2:] (baştaki "90" sil)
YOKSA EĞER rakamlar "0" ile başlıyor VE uzunluğu 11 ise:
rakamlar = rakamlar[1:] (baştaki "0" sil)
5. EĞER rakamlar uzunluğu 10 DEĞİL ise:
YAZ "Geçersiz numara"
BİTİR
6. "sonuç" = "0 (" + rakamlar[0:3] + ") "
+ rakamlar[3:6] + " "
+ rakamlar[6:8] + " "
+ rakamlar[8:10]
7. YAZ "Formatlanmış: " + sonuç
BİTİRPython kodunu inceleyelim:
import re
def telefon_formatla(numara):
# Sadece rakamları al
rakamlar = re.sub(r'\D', '', numara)
# Başındaki 90 veya 0'ı temizle
if rakamlar.startswith('90') and len(rakamlar) == 12:
rakamlar = rakamlar[2:]
elif rakamlar.startswith('0') and len(rakamlar) == 11:
rakamlar = rakamlar[1:]
# 10 haneli mi kontrol et
if len(rakamlar) != 10:
return None
# Formatla: 0 (XXX) XXX XX XX
return f"0 ({rakamlar[:3]}) {rakamlar[3:6]} {rakamlar[6:8]} {rakamlar[8:]}"
# Kullanıcıdan numara al
numara = input("Telefon numarasını girin: ").strip()
if not numara:
print("⚠️ Boş giriş yaptınız.")
else:
sonuc = telefon_formatla(numara)
if sonuc:
print(f"✅ Formatlanmış: {sonuc}")
else:
print("❌ Geçersiz numara! 10 haneli bir numara girin.")Bu sadece nasıl yapıldığını anlamak için inceleyebilirsiniz. Girilenin gerçek bir telefon numarası olup olmadığını kontrol etmek için farklı kriterler koymalısınız.
- Alan kodu dediğimiz ilk 3 hane doğru mu ve geçerli mi?
- Bu aralık kullanımda mı? Yani kullanıcının girdiği alan kodu bir operatöre tahsis edilmiş mi? Örneğin 500-> Türk Telekom’da ama 502-> Boşta
- En başta girilen (Türkiye için +90 / 90 ) ibare gerçekten hangi ülkeye ait?
Gibi gibi.. Kriterler arttıralabilir ya da daha kolay şekilde phonenumbers kütüphanesi kullanılabilir. Kütüphane Google tarafından geliştirilen libphonenumber kütüphanesinin Python için uyarlanmış halidir. Detaylı bilgi için: https://pypi.org/project/phonenumbers/
