CAGATAY.DEV
Search…
Düzenli İfadeler 🐥
Düzenli ifadeler yani "regular expressions" nedir, nasıl kullanılır gibi konuları bu bölümde işleyeceğiz.
Açılın ben regex biliyorum!

Regex yani düzenli ifadeler temelde bir katar / metin (string) içerisinde belirli desenleri tanımak için tasarlanmıştır. Temeli matematiksel bir yapıya dayanmaktadır "otomata teorisi" fakat biz bu temele değinmeyeceğiz. Tüm programlama dillerinin zühreviyatında regex - regexp mevcut demek yersiz olmayacaktır. Yazdığımız betikleri, programları tanıyan ve bunları makine diline çeviren yapılar aynı şekilde otomata teorisini ve regex'leri kullanmaktadır.
Regex'den korkmuyoruz, değil mi?
regex yazan kısmı JavaScript ile değiştirmek ister misin?

Kullanım alanlarına birkaç örnek verelim,
E-Mail Kontrolü
Güvenli Parola Kontrolü
Yazıdan Saat Ayıklama

^[^@\s]+@[^@\s]+\.\w{2,6}$

  • ^ -> Girdi başlangıcı.
  • [^@\s] -> Boşluk \s ve @ karakteri dışındakileri eşleştir.
  • + -> 1+ kere.
  • @ -> @ karakterini eşleştir.
  • [^@\s]+ -> Boşluk \s ve @ karakteri dışındakileri eşleştir. 1+ kere.
  • \. -> . karakterini eşleştir.
  • \w{2,6} -> 2-6 karakter arasında tüm karakterleri eşleştir (sayı, alt çizgi veya harf).
  • $ -> Girdi sonu

const isValidEmail = input => {
/*
Aşağıdaki regex'i yayında kullanmayınız!
%100 eşleşme sağlamaz.
Demo amaçlıdır.
*/
const regex = /^[^@\s][email protected][^@\s]+\.\w{2,6}$/g;
const result = regex.exec(input)
//S onuç null ise eşleşme bulunamadı
return !!result
}
const tests = [
`[email protected]`, // Geçerli
'', // Geçersiz
`test.test`, // Geçersiz
'@[email protected]', // Geçersiz
'[email protected]@cali.com', // Geçersiz
`cagatay.me`, // Geçersiz
`acilin ben regex [email protected]`, // Geçersiz
`[email protected]@gmail.com` // Geçersiz
]
console.log(tests.map(isValidEmail))
Dilerseniz %99 oranında e-mail eşleşmesini sağlayabileceğiniz onaylı regex'i tercih edebilirsiniz;
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
Regex sonucunda TLD (top level domain) kontolü - uzantı kontrolü yapmanızı şiddetle tavsiye ederim. abc uzantılı bir alan adı olmadığı sürece geçersiz bir e-posta olduğunu varsaymalı ve sisteme e-posta onayı ile kişileri almalıyız.

((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,35})

( # Grup başlangıcı
(?=.*\d) # 0-9 arasında bir sayı içermeli
(?=.*[a-z]) # bir küçük karakter içermeli
(?=.*[A-Z]) # bir büyük karakter içermeli
(?=.*[@#$%]) # listedeki bir özel karakteri içermeli "@#$%"
. # yukarıdaki tüm kontrollerden geçtikten sonra
{6,20} # minimum 6 maksimum 20 karakter uzunluğunda
) # "Bir metin olmalı" desenini bitir
?= Tek başına anlam ifade etmez diğer tüm durumları içerdiğinde true döndürür.

/\b([01]?[0-9]|2[0-3]):([0-5]\d)/
https://codepen.io/cagataycali/pen/MRPxGr
codepen.io

Kendi hazırladığın yazılım dilini tespit etmek için regex yazmaya hazırlanıyorsan derin bir nefes al, bu senin için acı verici olabilir.

Hazırladığın platforma kullanıcının gireceği verilerin kontrolünü regex ile kontrol ediyorsan, olası tüm senaryoları öngördüğüne emin olmalısın. Bu durumlarda regex her zaman en pratik çözüm olmayabilir.

Regex eşleştirme hızı senin hazırladığın desene göre sistemi performans darboğazına sokabilir. Bu, çoğu durumda, özellikle girdi kısa ve kesin ise (e-posta kontrolü) kullanışlı olabilir. Bununla birlikte hazırladığın regex ifadesi zayıf ise sistemine ek yük bindirebileceğini göz önünde bulundurmalısın.

Regex katarları işlemek için çok verimli bir araç olsa dahi her zaman kullanmanı gerektirmez. Okunabilir, tekrar yazılabilir, modülarize bir şekilde regex ifadelerini yazmak meşakkatli olacak ise lütfen daha az zahmet gerektiren şekilde problemini çöz, bu seni daha az zeki yapmayacaktır.
Copy link
On this page
Terminoloji - Regex Tam Olarak Nedir?
Regex Kullanım Alanları
Ne Zaman Regex Kullanmamalısın
Yazılım dili tespiti
Güvenlikle İlgili Kritik Giriş Filtreleme ve Kara Listeler
Performans Öncelikli Bölümler
Regex Gerektirmeyen Problemler