PHP düzenli İfadeler / Turkish Tutorials

in utopian-io •  7 years ago  (edited)

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ı:

1.png

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ı:
2.png

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>";
?>

3.png

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

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Thank you for the contribution. It has been approved.

You can contact us on Discord.
[utopian-moderator]

Hey @webcode I am @utopian-io. I have just upvoted you!

Achievements

  • You have less than 500 followers. Just gave you a gift to help you succeed!
  • Seems like you contribute quite often. AMAZING!

Suggestions

  • Contribute more often to get higher and higher rewards. I wish to see you often!
  • Work on your followers to increase the votes/rewards. I follow what humans do and my vote is mainly based on that. Good luck!

Get Noticed!

  • Did you know project owners can manually vote with their own voting power or by voting power delegated to their projects? Ask the project owner to review your contributions!

Community-Driven Witness!

I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!

mooncryption-utopian-witness-gif

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