C# String Sayısal Değer Kontrolü, dersimiz ile c sharp eğitim setime devam ediyorum. Bu dersimide string türünde olan bir değerin sayı olup olmadığını kontrol edeceğiz. Elbette bu dersi de githup projeme ekleyeceğim.
C# String Sayısal Değer Kontrolü
C# Sayı mı? Kontrolü ‘nü nasıl yapacağımızı görelim. Bunun birden fazla yöntemi var elbet. Aklıma gelen ve bulduğum tüm yöntemleri bu dersimde göstereceğim.
Formumuza bir button, iki label ve bir textbox ekledikten sonra aşağıdaki kodlarımızı yazıyoruz. Ekran görüntüsü aşağıdaki gibidir.
TextBox’a yazdığımız değerin sayı olup olmadığını kontrol edeceğiz ve 3 nokta olan labele yazacağız.
Yöntem 1 – ForEach Kullanarak Yapmak
bool SayiMi(string text) { foreach (char chr in text) { if (!Char.IsNumber(chr)) return false; } return true; }
Bu metodumuz aldığı parametredeki karakterleri tek tek kontrol eder. Eğer içerisinde bir tane bile sayı olmayan karakter varsa döngü kırılır ve sonuç false döner. Yani sayı değilse false döner. Şimdi nasıl kullanacağımza bakalım.
private void btn_kontrol_et_Click(object sender, EventArgs e) { if (SayiMi(txt_Deger.Text) == true) { lbl_durum.Text = "Sayıdır."; } else { lbl_durum.Text = "Sayı Değildir."; } }
Butonun Click eventi içerisinde kontrolümü yapıyoruz.
Yöntem 2 – Extension Class Kullanarak Yapmak
Bu yöntemde formumuzun class seviyesine bir class daha ekleyeceğiz. Class seviyesi ne diye soracak olursanız da, eventlerin tanımlandığı alanın dışında yani en dış alanda. Aşağıdaki görsel ile daha iyi anlayacağınızı umuyorum.
Öncelikle class’ımızı ekliyoruz. Bu kullanım bize güzel bir avantaj sağlayacak. Kodları gördüğünüzde 1. yöntem ile karşılaştırabilir ve istediğinizi seçebilirsiniz.
public static class ExtensionManager { public static bool SayiMi(this string text) { foreach (char chr in text) { if (!Char.IsNumber(chr)) return false; } return true; } }
2. yöntem kodlarımızı bu şekildeydi. Şimdi nasıl kullandığımızı görelim. Formuma bir buton daha ekledim ve kontrol et 2 adını verdim.
private void btn_kontrol_et_2_Click(object sender, EventArgs e) { if (txt_Deger.Text.SayiMi()) lbl_durum.Text = "Sayıdır."; else lbl_durum.Text = "Sayı Değildir."; }
NOT: If şartından sonra yada else den sonra tek bir satır olacaksa süslü parantezleri yazmanıza gerek yoktur.
Yukarıdaki fonksiyonun daha kısa hali de şöyledir.
public static class ExtensionManager { public static bool SayiMi(this string value) { double oReturn = 0; return double.TryParse(value, out oReturn); } }
Yöntem 3 – REGEX Kullanarak Yapmak
Bu yöntemde RegularExpressions namespace’ini kullanarak yapacağız. Öncelikle NameSpace’i import edeceğiz.
using System.Text.RegularExpressions;
Sonrasında metodumuzu yazıyoruz.
public Boolean SayiMi_3(String strVeri) { if (String.IsNullOrEmpty(strVeri) == true) { return false; } else { Regex desen = new Regex("^[0-9]*$"); return desen.IsMatch(strVeri); } }
Şimdi bu kodlarımızı nasıl kullanacağımızı görelim.
private void btn_kontrol_et_3_Click(object sender, EventArgs e) { if (SayiMi_3(txt_Deger.Text)) lbl_durum.Text = "Sayıdır."; else lbl_durum.Text = "Sayı Değildir."; }
Kullanım şekilleri genel olarak bu şekilde oluyor.
Yöntem 4 – char.IsDigit Metodu Kullanarak Yapmak
Bu yöntemde de IsDigit metodunu kullanarak kontrolümüzü gerçekleştiriyoruz.
static bool sayiMi_4(string a) { bool sonuc = true; for (int i = 0; i < a.Length; i++) if (!char.IsDigit(a[i])) sonuc = false; //Eğer karakter sayı değilse false döner return sonuc; }
Kullanım şeklide böyledir.
private void btn_kontrol_et_4_Click(object sender, EventArgs e) { if (sayiMi_4(txt_Deger.Text)) lbl_durum.Text = "Sayıdır."; else lbl_durum.Text = "Sayı Değildir."; }
Yöntem 5 – TRY Catch Kullanarak Yapmak
Bu da sonuncu yöntemimizdir. Bunu da verdikten sonra dersimizi bitirelim.
Bu yöntemde de try cacth bloğu kullanarak yapacağız. Buradaki dersimde ayrıntılı olarak anlatmıştım. Şimdi kodlarımızı görelim.
static bool sayiMi_5(string deger) { try { int.Parse(deger); return true; } catch (Exception) { return false; } }
Nasıl kullanacağımızı da görelim.
private void btn_kontrol_et_5_Click(object sender, EventArgs e) { if (sayiMi_5(txt_Deger.Text)) lbl_durum.Text = "Sayıdır."; else lbl_durum.Text = "Sayı Değildir."; }
Dediğimiz gibi kullanım şekilleri dört yöntemde de aynı. Sadece bir tanesinde farklıdır. Şimdi birde kullanım şeklinde farklılığa bakalım. Burada aslında tek satırlık if kullanımı da yapabiliriz.
Onu da hemen görelim.
lbl_durum.Text = sayiMi_5(txt_Deger.Text) ? "Sayıdır." : "Sayı Değildir.";
Basit bir işlem olsa da 5 farklı yok gördük arkadaşlar. Bunlardan istediğiniz herhangi birisini kullanabilirsiniz.
C# en sevdiğim yanlarından birisi de bu aslında. Bir işlemin birden fazla yapılış şekli var. Ne kadar açık fikirli olur ve geniş düşünürseniz daha farklı yollar bulabilirsiniz. Aslında bir yöntem daha var ama onu vermesek de olur. Zaten 5 farklı yöntem vermiş olduk.
C# String Sayısal Değer Kontrolü, dersimizde bu kadar dostlar. Diğer derslerimizde görüşmek üzere.
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Ayrıca kısa süre önce tüm YENİ derslerimi tek bir proje içinde yapıp github’a yükleyeceğim demiştim. Bu dersimde o projenin içerisinde bir klasör olarak yerini almıştır. Buraya tıklayarak projeye ulaşabilirsiniz.
Sağlıcakla ve takipte kalın ;)
Bol kodlu günler..
Çok faydalandım gerçekten teşekkürler. Aynı işlemin tek bir yolunu değilde bir çok yolunu vermeniz gerçekten süper olmuş. Çok teşekkürler.
Regex Yöntemi Yanlış ^[0-9]*$ yerine ^[0-9]+$ olmalı. Elinize Sağlık.
Düzeltmeniz için teşekkürker.