Form Kontrolleri – 1

Kod yazarken üzerinde en fazla kafa yorduğum ve zamanımın büyük bölümünü harcadığım formlar ve bunların kontrollerini düzenlemek üzere işe başladım.

Amacım küçük çapta bir kütüphane oluşturmak ve ihtiyacım olanları buradan kopyala-yapıştır yapmak ve maalesef  her uygulamada farklı kodladığım birçok fonksiyona standart kazadırmak. Böylece değişiklik yapmak veya hata ayıklamak çok daha basit hale gelecek. Yazdığım fonksiyonların büyük bir bölümünü de burada paylaşmak niyetindeyim. O yüzden yazının başlığında -1 ve fonksiyonların toplu adı olan myRegexp bulunuyor. Tahminen toplam 3-4 yazıdan oluşacak yararlı bir dizi olacak. Başlayalım;

İşe yararlılıkları ve hızları nedeniyle kodlarımda PHP PCRE (Regular Expressions (Perl-Compatible)) leri daha fazla kullanma kararı almıştım. Yani, str_replace, strpos, ereg ve eregi gibi bazı işlevlerin kullanımını en aza indirmeye çalışıyorum. Her şey bir yana regexp ile boğuşmak gerçekten eğlenceli. Tek sorun ise UTF-8…

Formdan gelen bilgileri kontrol etmek, kullanıcıyı doğru girdiler yapmaya zorlamak, girdileri temizlemek ve ihtiyacımıza uygun hale getirmek ve son olarak ki en önemlisi, uygulamamızın güvenliğini sağlamak oluşturduğum tüm fonksiyonların ilk amacı.

Varsayılan formumuzdan gelecek bilgiler: e-posta adresi, web site adresi, telefon numarası, mobile telefon numarası, posta kodu ve alınan ip adresi.

E-posta Adresi Kontrolü: Formdan gelen, kullanıcıya ait elektronik posta adresinin doğruluğunu kontrol edelim. Doğruluğu derken yanlış anlaşılmasın, sadece uygun formatta olup olmadığı kontrol edilecek. Yani;

isim_soyad@mail_server.com

gibi bir temel dizilime sahip olup olmadığı… Fonksiyonda ilk olarak “strtolower()” işlevi ile gelen bilgi küçük harflerden oluşan karakterlere çevrilecek ve ardından “preg_match()” ile dizilim kontrol edilerek TRUE/FALSE değeri döndürülecek.

/**
* check_email();
* Check if a string is in valid email format.
* Returns true if valid, false otherwise.
* @author Taylan Aktepe (http://www.taylanaktepe.com)
*/
function check_email($email = '') {
$email = preg_replace('/[s]+/', '', $email); // Clean white space
$email = strtolower($email); // Change with lowercase chars
return preg_match('/^([a-z0-9-_.]+)@([a-z0-9-]+.)+([a-z0-9]){2,4}$/i', $email);
}

echo ‘Check e-mail (taylan@mail.com):’. check_email(‘taylan@mail.com’);
echo ‘<br />’;

Örnek kontrolün sonucu “1″ yani TRUE olarak ekranda görünecektir.

Web Site Adresi (URL) Kontrolü: Formdan gelen, kullanıcı web site adresi (url) ni kontrol edelim. Bilgiyi yine küçük harfli karakterlere çevirelim. Ek olarak bu fonksiyonda sonradan istenilen düzenlemenin yapılabileceği üç adet kalıp (pattern) bulunuyor;

$pattern_pro : Gelen adres için izin verilecek protokol tipleri; http, https, ftp gibi…
$pattern_web :  Gelen adres için izin verilecek web eki (www). Bu ekin yerine “([a-z0-9-]+)” dizisi kullanıldığında subdomainlerin yoluda açılmış olacak.

$pattern_gro : Son olarak izin verilecek domain gurupları; com,net,org vb… Fonksiyon kodları;

/**
* check_url();
* Check if a string is in valid url format.
* Returns true if valid, false otherwise.
* @author Taylan Aktepe (http://www.taylanaktepe.com)
*/
function check_url($url = '') {
$url = preg_replace('/[s]+/', '', $url); // Clean white space
$url = strtolower($url); // Change with lowercase chars
$pattern_pro = '(http|https|ftp)'; // Protocol types
$pattern_web = '(www)'; // ([a-z0-9-]+) // Change it for allows the subdomains
$pattern_gro = '(com|net|org|info|biz|edu|mobi|gov)$'; // Domain groups
return preg_match('/^'.$pattern_pro.'?://'.$pattern_web.'.([a-z0-9-]+).'.$pattern_gro.'/i', $url);
}

echo ‘Check url (http://www.taylanaktepe.com):’. check_url(‘http://www.taylanaktepe.com’);
echo ‘<br />’;

Örnek kontrolün sonucu “1″ yani TRUE olarak ekranda görünecektir.

Telefon Numarası Kontrolü: Basit ancak işe yarar bir fonksiyon. Kontrol edilecek format;

Alan çıkışı(0), Alan Kodu (123), Telefon Numarası (1234567)

Gelen bilgi yukarıdaki gibi 3 bölüme ayrılacak ve her bölüm olması gereken karakter sayısı ile eşleştirilecek. Bunlardan önce ise kullanıcının girmiş olabileceği boşluk, nokta ve virgül karakterleri “preg_replace” işlevi ile temizlenecek. Fonksiyon kodları;

/**
* check_tel_number();
* Check if a string is in valid telephone number format.
* Returns true if valid, false otherwise.
* Example format: [0][123][2160535]
* @author Taylan Aktepe (http://www.taylanaktepe.com)
*/
function check_tel_number($tel_number = '') {
// Clean white space, commas and dots
$tel_number = preg_replace(array('/[s]+/', '/[,]+/', '/[.]+/'), '', $tel_number);
return preg_match('/^0{1}([0-9]){3}([0-9]){7}$/i', $tel_number);
}

echo ‘Check telephone number (01234567890):’. check_tel_number(‘01234567890′);
echo ‘<br />’;

Örnek kontrolün sonucu “1″ yani TRUE olarak ekranda görünecektir.

Mobil Telefon Numarası Kontrolü: Basit ancak işe yarar diğer bir fonksiyon ise mobil telefon numarası kontrolü. Kontrol edilecek format;

Alan çıkışı(0), Operatör Kodu (542), Telefon Numarası (1234567)

Gelen bilgi yukarıdaki gibi 3 bölüme ayrılacak ve her bölüm olması gereken karakter sayısı ile eşleştirilecek. Ek olarak ise operatörler için kalıp kullanılacak, böylece daha sonra istenilen değişiklikler yapılabilsin ve en önemlisi kontrolümüz daha gerçekçi olsun. Bunlardan önce ise kullanıcının girmiş olabileceği boşluk, nokta ve virgül karakterleri “preg_replace” işlevi ile temizlenecek. Fonksiyon kodları;

/**
* check_mobile_number();
* Check if a string is in valid mobile telephone number format.
* Returns true if valid, false otherwise.
* Example format: [0][544][1234567]
* @author Taylan Aktepe (http://www.taylanaktepe.com)
*/
function check_mobile_number($mobile_number = '') {
$mobile_number = preg_replace(array('/[s]+/', '/[,]+/', '/[.]+/'), '', $mobile_number); // Clean white space
$operator = '(532|533|535|536|537|542|543|544|555|556)'; // Mobile phone operators
return preg_match('/^0{1}'.$operator.'?([0-9]){7}$/i', $mobile_number);
}

echo ‘Check mobile telephone number (05424567890):’. check_mobile_number(‘05424567890′);
echo ‘<br />’;

Örnek kontrolün sonucu “1″ yani TRUE olarak ekranda görünecektir.

Posta Kodu Kontrolü: Kontrol edilecek format;

Şehir kodu(06), İlçe, kasaba vs. kodu (123)

Gelen bilgi yukarıdaki gibi 2 bölüme ayrılacak ve her bölüm olması gereken karakter sayısı ile eşleştirilecek. Bunlardan önce ise kullanıcının girmiş olabileceği boşluk, nokta ve virgül karakterleri “preg_replace” işlevi ile temizlenecek. Fonksiyon kodları;

/**
* check_postal_code();
* Check if a string is in valid postal code format.
* Returns true if valid, false otherwise.
* Example format: [06][440]
* @author Taylan Aktepe (http://www.taylanaktepe.com)
*/
function check_postal_code($postal_code = '') {
$postal_code = preg_replace(array('/[s]+/', '/[,]+/', '/[.]+/'), '', $postal_code); // Clean white space
return preg_match('/^([0-9]){2}([0-9]){3}$/i', $postal_code);
}

echo ‘Check postal code (06440):’. check_postal_code(‘06440′);
echo ‘<br />’;

Örnek kontrolün sonucu “1″ yani TRUE olarak ekranda görünecektir.

IP Adresi Kontrolü: Kullanıcın formunu kaydederken veya gönderirken ip adresini almak yararlı olacaktır. Daha sonra bu kullanıcıyı engellemek veya herhengi bir sebepten dolayı şikayet etmek gerekebilir :) Kontrol edilecek format;

9999.9999.9999.9999

Gelen bilgi yukarıdaki gibi 4 bölüme ayrılacak ve her bölüm olması gereken karakter sayısı ile eşleştirilecek. Bunlardan önce ise kullanıcının girmiş olabileceği boşluk karakterleri “preg_replace” işlevi ile temizlenecek. Fonksiyon kodları;

/**
* check_user_ip();
* Check if a string is in valid ip address.
* Returns true if valid, false otherwise.
* Example format: 999.999.999.999
* @author Taylan Aktepe (http://www.taylanaktepe.com)
*/
function check_user_ip($ip = '') {
$ip = preg_replace('/[s]+/', '', $ip); // Clean white space
return preg_match('/^([0-9]){1,3}.([0-9]){1,3}.([0-9]){1,3}.([0-9]){1,3}/i', $ip);
}

echo ‘Check ip address (999.999.999.999):’. check_user_ip(‘999.999.999.999′);
echo ‘<br />’;

Örnek kontrolün sonucu “1″ yani TRUE olarak ekranda görünecektir.

Şimdilik bu kadar…

Etiketle ve Paylaş:

  • Digg
  • del.icio.us
  • Mixx
  • Google Bookmarks
  • BlinkList
  • blogmarks
  • Blogosphere News
  • Fark
  • Netvouz
  • NewsVine
  • Reddit
  • Simpy
  • Slashdot
  • SphereIt
  • StumbleUpon
  • Technorati
  • Diigo
  • Facebook
  • FriendFeed
  • LinkedIn
  • Ping.fm
  • Sphinn
  • Yahoo! Bookmarks
  • Yahoo! Buzz
  • eKudos
  • Netvibes
  • Twitter

Yorum Gönder

Kullanılabilir XHTML etiketleri:: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>