Eğer gerçekten istersen, mutlaka olur.

Regular Expression

5 ay ago, Written by , Posted in NOTLARIM

Regular expression, bir metin içerisinde belirli bir model aramamıza yarayan şablon ifadelerdir. Diğer bir deyişle, belirli bir stringin belirlediğimiz kurallara uygun olup olmadığını test etmemize yarar. Örneğin; bir mail şablonu oluşturup, kullanıcı girdisinin bu şablona uyup uymadığını kontrol ederken ya da ismini girerken özel karakterleri kullanmaması için kısıtlama yapabiliriz.

Regular expression aynı zamanda “Regexp” ve “Regex” olarak da anılıyor. Ben de okunuş kolaylığından dolayı regex olarak telafuz ediyorum.

Öncelikle regex için özel anlam ifade eden yapılardan bahsetmek istiyorum.

Regex Grammar

  • [^…]

  • İçerisinde bulunan karakterlerin dışında kalanların kullanılacağını gösterir. “…” simgeseldir, herhangi bir metni ifade ediyor.

  • [0-9]

  • 0 ve 9 arasında herhangi bir rakam kullanılacağını gösterir.

  • [a-z]

  • küçük a ve z arasındaki harflerin kullanılacağını gösterir.

  • [A-Z]

  • büyük a ve z arasındaki harflerin kullanılacağını gösterir.

  • [abc]

  • a, b veya c karakterinden birinin kullanılacağını gösterir. “abc” simgeseldir, herhangi bir seti ifade ediyor.

  • “.”

  • tek bir karakteri gösterir.

  • “?”

  • bir önceki karakterin stringte olması ya da olmaması durumunu gösterir.

  • “\”

  • bir sonraki karakterin stringe dahil edilmesini sağlar.

  • “*”

  • bir önceki karakterin stringte hiç olmamasını ya da istenilen sayıda olması durumunu ifade eder.

  • “{}”

  • bir önceki karakterin parantez içerisinde verilen sayı kadar tekrar etmesini ifade eder.

  • “^”

  • satır başını ifade eder.

  • “$”

  • satır sonunu ifade eder.

    Tabi ki tüm özellikler bunlarla sınırlı değil. İhtiyaç oldukça bakmak ve kullanmak yeterli. Daha fazlası için regex hakkında

    Örnekler

    • MM/YYYY şeklinde girilmesi gereken bir tarih ifadesi yazalım. Mesela 07/2017

      Öncelikle MM olarak ayları tanımlayalım.
      “(0[1-9])”
      bu şekilde baktığımızda başında 0 olup yanına 1 ve 9 arasında herhangi bir sayı gelebilir ifadesini görüyoruz. 01,03,07 gibi. İstenirse 0 olmadan da kabul etmesini “?” ile sağlayabiliriz.
      “(0?[1-9])”
      dolayısıyla 1,3,4,02,09 gibi 0 ile başlayan ya da başlamayan ilk 9 ayı tanımlamış olduk.

      Yıl patternini tanımlamak gerekirse;
      ([12][0-9][0-9][0-9])
      Sadece binli ve ikibinli yılları dahil ettim. Görüldüğü gibi öncelikle 1 veya 2 aranıyor. Ondan sonra gelen 3 rakam da 0-9 arası olabilir.

      İkisini birleştirmek gerekirse MM/YYYY için;

      (0?[1-9])(\/)([12][0-9][0-9][0-9])

      Not: “/” karakterini gösterebilmek için başına “\” backslash konulmuştur.

    • Kullanıcıdan ismini aldığımızı düşünelim. İsim içerisinde özel karakter olup olmadığını anlamak için bir pattern hazırlayalım.

      Öncelikle kullanılabilecke karakterleri belirleyelim. Daha sonra ise “^” ile bu karakterler dışında bir kullanım olduğunda haberimiz olsun.
      [^A-Za-z0-9]

    • En az 6 en fazla 12 karakterli bir kullanıcı adı tanımlayalım. Kullanıcı adı sadece küçük harf, sayı “_” ve “-” içerebilsin.

      (^[a-z0-9_-]{6,12}$)

    Yazdığımız ifadeleri test etmek için online regex adresini kullanabiliriz.

    Bir kaç işe yarayabilecek regex:

    Hex. değerlerle eşleşir:
    /^#?([a-f0-9]{6}|[a-f0-9]{3})$/

    Email pattern:
    /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/

    Url pattern:
    /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/

    IP adres patterni:
    /^(?:(?: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]?)$/

    HTML tag patterni:
    /^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/

    Bir Cevap Yazın

    E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir