Neler Öğreneceğiz?
- Php'de düzenli ifadeler
- Kontrol türleri
Gereksinim
- PHP
Zorluk Seviyesi
- Orta Düzey
Detaylı Anlatım
PHP de düzenli ifadeler bizim belirlediğimiz şartlara uygun bir durum gerçekleşip gerçekleşmediğini kontrol ediyor. Bu kütüphane ile günde hemen hemen her gün karşılaşıyoruz yeni bir üyelik oluştururken mail adres şartları telefon numarası sayısı vb. bir çok örnek verebiliriz. Hatta ütopianda da konu açarken düzenli ifade mevcut etikette sadece ingilizce karakterler varsa kabul ediyor ve kelime sayısı gibi.
ilk örneğimizden başlayalım bu örnekte metin de utopian kelimesini arayacağız. ve bulduğumuz taktirde yazdıracağız. eğer yok ise boş değer dönecektir kodlar;
<?php
$terms = "#utopian#";
$messages = "günümüzün en popüler geliştirici ve öğretici paltformu utopian dır.";
preg_match($terms,$messages,$output);
print_r($output);
?>
çıktı:
Yukarıdaki sonuç gibi çıktı alacağız. peki bu satır kodlarında ne yaptık onları ince ayrıntısına kadar inelim. öncelikle $terms değişkenine istediğimiz içinde bulunması istediğimiz veya aradığımız ifadeyi yazıyoruz.Daha sonra $messages değişkenine istediğimiz mesajı atıyoruz. Bu yazıdaki ilk fonksiyonumuz olan preg_match() fonksiyonun görevi ise istediğimiz sonuç bulunursa sonucu değişken olarak döndürecektir. eğer bulunmaz ise false olarak döndürür. $messages değişkeninde $terms ifadesini aradı doğru bulursa $output değişkenine atadı eğer bulamassa false olacaktır atama olmayacaktır. ve son satırda da çıktımızı alıyoruz.
Sınıflara Göre Ayırma
Bu kısımda ise belirlediğimiz aralıklar arasında bulunduğu taktirde kabul et veya belirlediğimiz parametreler arasında ki bulunan karakterleri gösterir bize. önce satır kodlarını inceleyelim kodlardan sonra detaylı bi açıklama yapacağım.
<?php
$terms="#[a-l]#";
$message= "utopian steemit";
preg_match_all($terms,$message,$output);
print_r($output)
?>
çıktı:
evet yukarıda ki çıktıyı alıyorsak her hangi bir sorun yok demektir. peki yukarıdaki kodlarda neler yaptık. ilk olarak $terms değişkenine sadece istediğimiz bir sınıfı atadık yani a'dan l harfine kadar her hangi bir küçük harfle eşleştirme yaptım. daha sonra ki $message değişkenine istediğim bir mesaj metnini yazdım. o metin içerisindeki a'dan l harfine kadar küçük harf var ise eşleştirme yapılacaktır. bu seferde farklı bir fonksiyon kullanıyoruz preg_match_all fonksiyonu bu fonksiyon diğer fonksiyona göre birden fazla işlemler için kullanır. ilk örnekteki sonuç kısmı ile aynı.
Gruplama
Bu ifadede ise daha geniş kapsamlı aramalar ve kısıtlamalar yapacağız yani bir proje düşünün bu proje içerisindeki resimlerin yollarını arıyoruz. ve bu sayede bu gruplama sayesinde erişim şansımız kolaylaşır aşağıdaki kod satırlarını inceleyin.
<?php
$terms="#src='([a-z\.]+)'#";
$message= "<img src='steemit.jpg'><img src='utopian.png'>";
preg_match_all($terms,$message,$output);
echo "<pre>";
print_r($output[1]);
echo "<pre>";
?>
yukarıdaki sonucu alırsak her şey yolunda demektir.
kodları açıklamak gerekirse ilk olarak $message değişkenine resim yollarının adresini yazdık. daha sonraki $terms ifadesine dikkat ederseniz sadece resim yoluna uyguladık. ve bu sayede tüm resim yollarını ekrana yazdırmış olduk.
Veya Operatörü ( | )
Bu operatörümüzde ise birden fazla sonucu düşünerek kullanıyoruz. mesela utopian veya steemit kelimesi arasında bir seçim yapacaz ama bunun dışındaki tüm ifadeleri ret edecektir.
örnek olarak bir renk kodu oluşturalım eğer renk kodu standartlarını sağlamıyorsa hata versin.
kod satırları şu şekilde olacak.
<?php
$terms="/^#[0-9A-F]{3}|[0-9A-F]{6}$/i";
$message= "#00z00";
if(preg_match_all($terms,$message))
{
echo "başarılı";
} else {echo "hatalı";}
?>
sonuç : hatalı
buradaki ifadeyi anlatmak gerekirse ilk olarak renk kodlarının başında "#" işareti olmak zorundadır ondan dolayı en başa onu koyduk daha sonra ise bunlar 3 veya 6 karakterden oluşması lazım onun için tekrarlıyıcı bir ifade kullandık. dikkat ederseniz burada veya operatörünü kullandık ikisinden biri olması gerekiyor işlem gerçekleşirse true sonucu dönecek ve başarılı çıktısı alınacak ama gerçekleşmezse false dönecek hatalı sonucu yazdıralacaktır.
En Çok Kullanılan Desenler
[:lower:] - her hangi bi küçük harf ile eşleşir. [a-z] methodu ile aynıdır.
[:upper:] - her hangi bi büyük harf ile eşleşir. [A-Z] methodu ile aynıdır.
[:alpha:] - Büyük küçük harf fark etmeksizin eşleşir. [A-Za-z] methodu ile aynıdır.
[:^alpha:] - bu terimde harf dışında tüm karakterlerle eşleşir.
[:alnum:] - Bütün harf ve rakamlarla eşleşir.
[:digit:] - Sadece rakamlarla eşleşir.
Ayrıca kullanılan bir kaç desen;
Link Kontrol;
<?php
$link = "http://steemit.com";
$terms = "/^(https?:\/\/)([\w\.-]+)\.([a-z\.]{2,6})([\/\w\?=.-]*)*\/?$/";
if(preg_match($terms,$link))
{ echo "Başarılı link";}
else {echo "Hatalı link";}
?>
yukarıdaki örnekte ise $terms değişkenini incelersek en başta http veya https olabilir olarak kabul ediyoruz. S nin yanına ? işareti koyarak olsada olur olmasada. daha sonra metin sadece w bulunan karakterlerden olacaktır. daha sonra ifade fark etmiyor noktadan sonra ise iki veya altı karakterli bir uzantı olma şartı koştum. bu örnekte bir çok şey öğrendik. kısıtlamalar uygunluğu şartları pekiştirmiş olduk. Teşekkür ederim !
Posted on Utopian.io - Rewarding Open Source Contributors
Thank you for the contribution. It has been approved.
You can contact us on Discord.
[utopian-moderator]
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Hey @webcode I am @utopian-io. I have just upvoted you!
Achievements
Suggestions
Get Noticed!
Community-Driven Witness!
I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!
Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit