En basitinden sayı girilebilecek bir alana kişinin alfabetik bilgi girmesi ve bu şekilde kaydetmeye çalışması kod bölümünde hatalara neden olabilecektir. Olası hataları engellemek için sayı girilecek bir veri alanına kullanıcının sayı girip girmediğini kontrol etmemiz ve girilmediyse uyarı mesajı vererek kaydetme işlemini yapmamız gerekir.
Bu tip durumlarda kuralları kodlamaya kalkarsak onlarca belki yüzlerce if deyimi kullanmamız gerekecektir. Bu işlem için yardımımıza koşan bir yapı mevcut. Oda regular expressions. Türkçe karşılığı düzenli ifadeler oluyor ama bence türkçe karşılığı yapılan işe uygun değil. Bu nedenle ben ingilizce regular expression (kısacada regex) kullanacağım.
Regular Expression ne Yapar
Regexp kısaca herhangi bir karater dizisini (string) belirlediğiniz bir desene uygunluğunu test eder ve size verilen metin ifadeye uygundur veya değildir şeklinde sonuç döner. Regexp içinde iki önemli bölüm var 1. metin bilgi bu örneğin kullanıcının bir metin kutusu içine girdiği bilgi olarak düşünülebilir. 2. önemli bölüm ise desen. Regexp her zaman verdiğiniz desene göre hareket edecektir. Bu deseni hazırlamak bayağı uğraştıran bir şey ben sık kullanılanlarla ilgili aşağıda liste halinde desenleri vereceğim.
Web sayfasında regular expressions nasıl kullanabiliriz.
Öncelikle javascript regex kullanımı tanır ve destekler. Regular expressions için özel tanımlanmış RegExp sınıfı bulunmaktadır. RegExp sınıfından deseni vererek oluşturacağınız nesne üzerinden regexp sınıfı metodlarını kullanarak regular expression işlemlerini gerçekleştirebilrisiniz.
Bu işlemler exec,match,replace,split,compile,test,search işlemleridir ama ben burada sadece test üzerinde duracağım. Diğerleride çok faydalı işlemler ama şu an amacımızın sadece girilen verinin doğrulaması(validasyonu) olduğunu düşünürsek gerekli değiller.
test metodu kullanımı:
var regobj= new RegExp(desen);Örnek kodda da görüldüğü gibi regobj adlı bir nesne oluşturuyoruz. Sonra test metodunu kullanarak girilen verinin desene uygunluğuna bakıyoruz.
if (regobj.test(girilendegerdegiskeni)) { uygun } else { uygun değil uyarı ver }
Gerçek örnek: Örneğin form1 isimli formumuzda txtSayi adli bir metin kutusu bulunsun ve burada sadece tamsayi olmasını test etmek istiyoruz. Kaydet butonumuzun onclick eventına(olayına) aşağıdaki kodu yazarak bu işlemi yapabiliriz.
var ro=new RegExp('\d');if(ro.test(document.form1.txtSayi.value)) {return true;} else {alert('hatalı giriş');return false;}Yukarıdaki kod ile txtSayi alanı için sayı girilip girilmediğini kontrol ettirdiğimiz gibi button uyarı veriyor ve false döndüğü için submit işlemini yapmıyor. Yani veriler sayfaya post edilmiyor. Sadece uyarı mesajı geliyor.
Javascripte RegExp nesnesinin daha kısa yazımıda mevcuttur. Yukarıdaki RegExp sınıfından uzun uzun oluşturmak yerine var ro=/\b/; şeklindede regexp tanımlanabilir. Yani desenin bölü (slash) karakterleri içine alınarak yazılmasıda RegExp nesnesi oluşmasını sağlar.
Ve işte desenler...
| Tamsayı | ^\d*$ |
| Pozitif Tamsayı | ^\d+$ |
| Negatif Tamsayı | ^\d-$ |
| İşaretsiz(pozitif) Kesirli sayılar | ^\d*\.?\d*$ |
| 1 ile 5 arası sayılar | ^[1-5]$ |
| (\w+?@\w+?\x2E.+) | |
| tarih(31.12.2010, 31-12-2010, 31/12/2010) | ^([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0]?[1-9]|[1][0-2])[./-]([0-9]{4}|[0-9]{2})$ |
| tarih(31.12.2010) | ^([0]?[1-9]|[1|2][0-9]|[3][0|1])[.]([0]?[1-9]|[1][0-2])[.]([0-9]{4}|[0-9]{2})$ |
| Saat | ^([0-1][0-9]|[2][0-3]):([0-5][0-9])$ |
| IP | \b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b |
^ satırın başında olması gerektiği
YanıtlaSil$ satırın sonunda olması gerektiğini belirtir.
Dolayısıyla 2 sinin arasında sadece belirtilen olması gerekir aksi takdirde FALSE döndürür. Bu şekilde sadece istediğimiz karakterleri yazdırabiliriz..