Hayat kurtaran Regular Expression - Düzenli İfadeler - 2 [Arşiv]

Bir önceki yazımızda Regular Expression'lar hakkında bilgi sahibi olmuştuk. Şimdi ise olayı örnekler yaparak nasıl pekiştireceğimizi göreceğiz.

Örnek 1

C#'da yazdığınız programda bir alana yanlızca 5 haneli bir sayı girdirmek istediğimizi düşünelim. Normalde bir programcının elinin altında bu işi gerçekleştiren componentler bulunur fakat bulunmadığını ve kullanmak istemediğinizi varsayıyorum :)

Bu işlemin aynısını Formunuza bir MaskedTextBox koyup Mask özelliğine 5 tane sıfır yazarak da gerçekleştirebilirsiniz.

Fakat bizim amacımız bunu RegularExpression ile yaptırmak. Daha karmaşık şeyler gerektiğinde MaskedTextBox kesinlikle işinize yaramayacaktır ;)

Formumuza 1 adet TextBox ve 1 adette Button koyalım. Örneklerimizin vazgeçilmez klasik kontrolleri :)

İlk olarak Kod sayfamızın en tepesine

using System.Text.RegularExpressions;

yazıyoruz. Daha sonra Button'umuzun Click olayına;

Regex regex = new Regex(@"\d{5}");
if (regex.Match(textBox1.Text).Success)
    MessageBox.Show("Girdiğin doğru bir değer");
else
    MessageBox.Show("Yanlızca 5 rakamlı bir sayı girebilirsin.");

yukarıdaki kodu yazdıktan sonra uygulamamızı çalıştırıp test ediyoruz. Uygulamamız aşağıdaki gibi sonuç verecektir.

Eğer sayı girersek; "Girdiğin doğru bir değer"
Eğer sayı girmez veya 5 haneli bir sayıdan farklı bir sayı girersek de "Yalnızca 5 rakamlı bir sayı girebilirsin." şeklinde bir uyarı alırız.

Örnek 2

Bu örneğimizde de bir string ifadesi içinde "c#" geçen ifadelerin sayısını alalım. Bu işlemi yine Regex ile yapmak çok basit bir işlem olacaktır. İlk olarak yine bir Regex ifadesi oluşturalım. Aşağıdaki kodları yine Button'umuzun Click olayına yazıyoruz.

Regex regex = new Regex(@"c#");
MessageBox.Show(regex.Matches(textBox1.Text).Count + " adet C# ifadesi bulundu.");

Uygulamamızı çalıştırdığımızda yine aşağıdaki gibi bir sonuç ekranı ile karşılaşacaksınız.

[Resim Silindi]

Not : Regex'leri kullanırken kritere uyan değeri Regex.Match ve kritere uyan değerleri ise Regex.Matchs ile alıyoruz.

Örnek 3

Şimdiki örneğimizde ise string bir dizi içerisinde geçen email adreslerini bulmaya çalışalım. Bu işlemi gerçekleştirmek için çoklu E-Mail doğrulaması yapan kriteri yazmamız gerekir. Bunun için kriterimiz "[\w-]+(?:\.[\w-]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7}" olacaktır.

Şimdi TextBox nesnemizin özelliğini Multi-Line yapalım ve formumuzu da biraz genişletelim. Daha sonra bulduğumuz Mail adreslerini formumuza bir ListBox ekleyerek yazdıralım.

Bu sefer Button_Click olayına yazacağımız komut aşağıdaki gibi olacaktır.

Regex regex = new Regex(@"[\w-]+(?:\.[\w-]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7}");
foreach (Match bulunanEmail in regex.Matches(textBox1.Text))
{
    listBox1.Items.Add(bulunanEmail.Value);
}

Uygulamamızı çalıştırdığımızda aşağıdaki sonuçları almış oluyoruz.

Asp.net Tarafı

Sanırım bu 3 örnek olayın mantığını kavramanıza yetmiştir. Şimdi birde bu işlemlerin Asp.net tarafında nasıl yapıldığını görelim.

Aslında Asp.net tarafında bulunan farklılık Client-Side ve Server-Side olarak çıkıyor karşımızda. Yani Regex'leri hem Server-Side tarafında hem de Client-Side tarafında kullanabiliriz.

Server-Side tarafında kullanımı C# örneklerimizde yaptığımız uygulamalardan tamamen farksız.

Client-Side tarafında ise bu işlemi gerçekleştiren Regular Expression Validator bulunuyor. Biz kriterimizi Regular Expression Validator'ün Validation Expression özelliğine yazıyoruz.

Bu kontrolde bizim için çokça kullandığımız standart kriterler Visual Studio geliştiricileri tarafından eklenmiş. Bunları Regex kontrolümüzün ValidationExpression özelliğinin yanındaki "..." butonuna tıklayarak görebiliriz. Karşımıza aşağıdaki gibi bir seçim listesi gelecektir.

[Resim Silindi]

Asp.net'de Validation Kontrolü hakkında daha detaylı bilgi almak istiyorsanız, Erdem arkadaşımın Asp.net Validation Control makalesini okuyabilirsiniz.

Asp.net 'de basit bir örnek ile olayı pekiştirelim.

Sayfamıza 1 Adet TextBox, 1 Adet Button ve 1 Adet Listbox ekliyoruz. 3.cü örneğimizin aynısını Asp.net ile uygulayacağız.

Button'umuzun Click olayına aşağıdaki kodu yazalım ve uygulamamızı çalıştıralım.

Regex regex = new Regex(@"[\w-]+(?:\.[\w-]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7}");
foreach (Match email in regex.Matches(TextBox1.Text))
{
ListBox1.Items.Add(email.Value);
}

Kodu incelerseniz 3.cü örneğimizden farksız olduğunu siz de göreceksiniz. Çalıştırıp test edelim.

Şimdilik bu kadar örnek ve uygulama yeter :)

Bu makale serisine devam eder miyim bilmiyorum ama, bir sonraki makalemizde görüşmek üzere :)

Selametle...