C# ile Regex Kullanıcı Adı ve Şifre Kontrolü
- 1747
- (2)
- (5)
- 22 May 2021
Regex Nedir?
Regex ifadesi Regular Expression yani Düzenli İfadeler anlamına gelmektedir. Bir string değeri belli bir kalıp içerisinde tutmaya ya da değerlendirmeye yarar. Örneğin o değerin sadece sayılardan oluşmasını isteyebilirsiniz. Ya da sayı ve harflerden oluşup özel karak içermemesini de isteyebilirsiniz. Bu gibi durumlar için Regex kullanımı oldukça yaygındır.
Google regex test aratması ile string değerlerin regex uyumluluğunu test edebileceğiniz çeşitli websiteleri bulabilirsiniz. Çünkü regex değerlerinin salt halleri bazen anlaşılması zor ve karmaşıktır.
C#' da Regex Kullanımı
C# dilinde Regex
sınıfının kullanılabilmesi için kodunuza System.Text.RegularExpressions
kütüphanesini eklemelisiniz.
using System.Text.RegularExpressions;
Regex
sınıfı tanımlanırken bir pattern
parametresi ile tanımlanmaktadır. Bu parametre Regex
öğesinin string
değerleri hangi kriterlere göre denetleyeceğini karmaşık bir yapıda ifade etmektedir.
Örneğin ^(?=[a-zA-Z])[-\w.]{5,16}([a-zA-Z\d]|(?<![-.])_)$
regex değeri, uzunluğu 5 ve 16 karakter arası olan, büyük ve küçük karakter içeren bir string
değeri ifade eder. Eğer uzunluk 4 karakter veya 20 karakter olursa uyumsuzluk olacaktır. Sayı içerebilir ancak sayı ile başlayamaz. Aslında bu Regex
bir kullanıcı adı için idealdir.
Aşağıdaki örnekte daha iyi anlaşılabilir.
public bool IsAccountNameValid(string account_name)
{
Regex regex = new Regex(@"^(?=[a-zA-Z])[-\w.]{5,16}([a-zA-Z\d]|(?<![-.])_)$");
return regex.IsMatch(account_name);
}
// Eğer account_name değeri regex ile uyumlu olursa true, olmazsa false değeri dönecektir.
// Mesela 12yusuf false, yusuf12 true değeri döndürür.
// ali değeri false döndürür, çünkü 5 karakterden kısadır.
Şifreler için ideal bir regex arıyorsanız ^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@!%*?+#&'()[=\"€])[A-Za-z\\d$@!%*?+#&'()[=\"€']{8,}
son derece idealdir. İçerisinde bir küçük, bir büyük karakter ve bir sayı olmak zorundadır. Uzunluğu 8 karakterden büyük olmalıdır. Aksi halde eşleştirilen string
değeri uyumsuz olacaktır.
public bool IsPasswordValid(string password)
{
Regex regex = new Regex("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@!%*?+#&'()[=\"€])[A-Za-z\\d$@!%*?+#&'()[=\"€']{8,}");
return regex.IsMatch(password);
}
// Eğer password değeri regex ile uyumlu olursa true, olmazsa false değeri dönecektir.
// Mesela sifre1234 false, Sifre123! true değeri döndürür.
Eğer bu işlemi Regex
ile değil de koşullar ile yapmak isteseydiniz, çok sayıda if
ve else if
koşulu yazmanız gerekirdi.