Türkiye cep telefonu numarası için regex: +90, 05xx ve farklı yazım biçimleri
+90, 0 ve boşluklu telefon girişlerini önce normalize edin; Türkiye cep telefonu numarasının biçimini esnek ve bakımı kolay bir regex ile doğrulayın.
Türkiye cep telefonu numaraları kullanıcı tarafından +90 5xx, 05xx, boşluklu, parantezli veya tireli biçimde yazılabilir. Bütün bu seçenekleri tek ve okunması zor bir regex içinde çözmek yerine önce girişi normalize etmek, ardından ulusal numara biçimini doğrulamak daha bakımı kolaydır.
Aşağıdaki yaklaşım numaranın biçimini kontrol eder; hattın gerçekten tahsis edildiğini, aktif olduğunu veya belirli bir operatöre ait kaldığını kanıtlamaz. Numara taşınabilirliği nedeniyle prefix’ten güncel operatör sonucu çıkarmak ayrıca güvenilir değildir.
Hedef biçimi belirleyin
Normalize edilmiş cep telefonu numarasını, başında ülke ve trunk kodu olmayan 10 haneli ulusal biçimde saklayalım:
5XXXXXXXXX
Bu biçim için temel regex:
^5\d{9}$
^ ve $ tüm değerin eşleşmesini, 5 cep telefonu alanını, \d{9} ise kalan dokuz rakamı ifade eder. Belirli operatör prefix’lerini regex içine sabitlemek, BTK tahsisleri güncellendiğinde geçerli numaraların reddedilmesine neden olabilir.
Alan zorunlu değilse boş değeri telefon regex’iyle geçerli saymak yerine form kuralında ayrı yönetin. Böylece “boş bırakılabilir” kararıyla “yazıldıysa doğru biçimde olmalı” kuralı birbirine karışmaz.
JavaScript ile normalize edip doğrulayın
function normalizeTrMobile(input) {
let digits = String(input).replace(/\D/g, '');
if (digits.startsWith('0090') && digits.length === 14) {
digits = digits.slice(4);
} else if (digits.startsWith('90') && digits.length === 12) {
digits = digits.slice(2);
} else if (digits.startsWith('0') && digits.length === 11) {
digits = digits.slice(1);
}
return /^5\d{9}$/.test(digits) ? digits : null;
}
normalizeTrMobile('+90 (532) 123 45 67'); // "5321234567"
normalizeTrMobile('0532 123 45 67'); // "5321234567"
normalizeTrMobile('532-123-45-67'); // "5321234567"
Fonksiyon başarılı olduğunda tek biçim döndürür, başarısız olduğunda null verir. Veritabanında ülke kodunu ayrı tutabilir veya E.164 sunumu için doğrulanmış değerin başına +90 ekleyebilirsiniz.
Serbest karakter temizliğinin sınırını bilin
replace(/\D/g, '') kullanıcı dostudur; parantez ve boşlukları kaldırır. Ancak rastgele metnin içindeki rakamları da birleştirebilir. Katı bir form gerekiyorsa önce izin verilen karakterleri kontrol edin:
const allowedInput = /^\+?[0-9()\s-]+$/;
function validatePhoneField(value) {
if (!allowedInput.test(value.trim())) return null;
return normalizeTrMobile(value);
}
Kopyala-yapıştır ile gelen görünmez karakterler için arayüzde açık hata mesajı verin. “Telefon numarası geçersiz” yerine kabul edilen örnek biçimi göstermek kullanıcıyı daha hızlı yönlendirir.
Regex doğrulaması neden yeterli değildir?
Regex yalnızca uzunluk ve başlangıç rakamını doğrular. Numaranın kullanıcıya ait olduğunu doğrulamak için tek kullanımlık kod gönderme gibi ayrı bir sahiplik kontrolü gerekir. SMS doğrulamasında kod süresi, deneme sayısı, yeniden gönderim sınırı ve kötüye kullanım koruması uygulanmalıdır.
Operatör veya numara türü kesin olarak gerekli bir iş kuralıysa güncel, yetkili bir numaralandırma kaynağı kullanılmalıdır. Regex’e bugün geçerli görünen bütün prefix’leri yazıp yıllarca değişmeyeceğini varsaymayın.
Frontend ve backend aynı kuralı paylaşmalı
HTML pattern veya JavaScript kontrolü kullanıcı deneyimini iyileştirir; kolayca atlanabilir. Backend aynı normalize ve doğrulama kuralını yeniden uygulamalıdır. Hatalı değeri olduğu gibi loglamak yerine kişisel veri politikanıza göre maskeleyin ve yalnızca gereken süre boyunca saklayın.
Kısa rehber
Sık yapılan hata
+90, 0, boşluk ve parantez seçeneklerinin tamamını tek karmaşık regex’e sıkıştırmak veya operatör prefix’lerini kalıcı sanmak.