Düzenli İfade Fonksiyonları

Merhabalar, birçok kez preg_match konusunda problem çektiğimiz için size tüm kaynaklardan alınmış açıklayıcı bir makale hazırlama ihtiyacı duydum

Öncelikle bu iki terimin ne olduğuna bakalım

<b>POSIX</b>, (Portable Operating System Interface for Unix) UNIX için Taşınabilir İşletim Sistemi Arabirimi.
<b>PCRE</b>, (Perl Compatible Regular Expressions) Perl Uyumlu Düzenli İfadeler

Öncelikle PHP 5.3.0 ile yayından kalkan POSIX ve yerine kullanılacak olan PCRE fonksiyonlarına bir gözatalım.

POSIX PCRE
ereg_replace () preg_replace ()
ereg () preg_match ()
eregi_replace () preg_replace ()
eregi () preg_match ()
split () preg_split ()
spliti () preg_split ()
sql_regcase () Eşdeğer Yok

Peki nedir bu preg fonksiyonları?

preg_grep Koşula uyan dizi elemanlarını seçer. Ör:
$fl_array = preg_grep("/^(\d+)?\.\d+$/", $array);
preg_match Regexp koşulunu metne uygular, sonuçlar diziye aktarılır. Ör:
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
preg_match_all İki boyutlu dizi kullanarak preg_match tan farklı olarak grup elemanlarını da ayırır. Ör:
preg_match_all("|<[^>]+>(.*)</[^>]+>|U",<br> "<b>example: </b><div align=left>this is a test</div>",<br> $out, PREG_PATTERN_ORDER);
preg_replace Bul değiştir işlemini regexp uygunluğuna göre yapar. Ör:
$string = 'April 15, 2003';<br> $pattern = '/(\w+) (\d+), (\d+)/i';<br> $replacement = '${1}1,$3';<br> echo preg_replace($pattern, $replacement, $string);
preg_replace_callback preg_replace’den farklı olarak değiştirme işleminde PHP fonksiyonunu kullanır. Bu durum çok daha kapsamlı değişim yapabilme olanağı sağlar.
preg_split Regexp uyumuna göre metni bölme işlemi yapar. Ör:
$keywords = preg_split("/[\s,]+/", "hypertext<br><br />
language, programming");

 

Array Walk Recursive Kullanımı

Array dizi içerisindeki verilere bazı php fonksiyonları (htmlspecialchars,trim,strip_tags vs) uygulanamaz. Bunun için array_walk_recursive kullanmak gerekir.

Örnek Kullanım:

(Not:Aşağıdaki örnekte tarayıcı html taglarını dizi içerisinde baskılamak için kullanılmıştır.)

<?php header('Content-type: text/html; charset=utf-8'); 

function filtre(&$value) {
 $value = htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
}

$yazi="<b>örnek: </b><div align=left>bu bir denemedir</div>";
preg_match_all("|<[^>]+>(.*)</[^>]+>|U",$yazi,$cikti);

 
array_walk_recursive($cikti, "filtre");
print_r($cikti); 
?>

Çıktısı

Array
(
    [0] => Array
        (
            [0] => <b>örnek: </b>
            [1] => <div align=left>bu bir denemedir</div>
        )

    [1] => Array
        (
            [0] => örnek: 
            [1] => bu bir denemedir
        )

)

Türkiye Telefon Numarası Formatı ve Doğrulama

<html><head>
 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
 <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
 <script type="text/javascript" src="http://cloud.github.com/downloads/digitalBush/jquery.maskedinput/jquery.maskedinput-1.3.min.js"></script>
<script type="text/javascript">//<![CDATA[ 
$(window).load(function(){
$("#phone").mask("+?99 (999)-999-99-99");
$("#phone").on("blur", function() {
 var last = $(this).val().substr( $(this).val().indexOf("-") + 1 );
 
 if( last.length == 3 ) {
 var move = $(this).val().substr( $(this).val().indexOf("-") - 1, 1 );
 var lastfour = move + last;
 
 var first = $(this).val().substr( 0, 9 );
 
 $(this).val( first + '-' + lastfour );
 }
});
});//]]> 
</script>
</head>
<body>
<form action="" method="get">
 <input type="text" name="tel" id="phone" value="90">
 </form>
</body></html>

<?php
function tel($num) {
$nums=str_replace(array("+"," ","(",")","-"),array("00","","","",""),$num);
if(is_numeric($nums) AND strlen($nums) == 14){
return $num;
}else{
return false;
}
}
function num($num) {
$num=str_replace(array("+"," ","(",")","-"),array("00","","","",""),$num);
if(is_numeric($num) AND strlen($num) == 14){
$num = preg_replace('/[^0-9]/', '', $num);
return $num;
}else{
return false;
}
}
echo tel($_GET["tel"]);
echo "<br>";
echo num($_GET["tel"]);
?>

 

Askulator Oylama Sistemi Tarzında Daire Etrafında Daire Sıralama

http://jsfiddle.net/ThiefMaster/LPh33/4/

http://jsfiddle.net/nf7kA/

Yukarıdaki örnekleri olan işlemin php olarak hesaplaması:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
 <style type="text/css">
 .maincircle {
 position: absolute;
 }
 .inner {
 position: relative;
 width:290px;
 height:290px;
 border-radius: 50%;
 }
 .circle {
 position: absolute;
 width:35px;
 height:35px;
 border-radius: 50%;
 font-family: "Segoe UI", tahoma, sans-serif;
 font-size: 12px;
 text-align:center;
 vertical-align:middle;
 background-color: #bd1421;
 line-height: 3em;
 color:#fff;
 }
 </style>
</head>
<body>
 <div class="maincircle">
 <div class="inner">
 <?php 
 for($x=10;$x>-1;$x--){
 $borderfark=85;//değişebilir
 $kacabol=19;//değişebilir
 $angel=(($x*(360/$kacabol))+$borderfark);
 $radians=$angel*pi()/180;
 $innerdegeri=290;//değişebilir
 $radius=$innerdegeri/2;
 $left=(sin($radians)*$radius+$radius);
 $top=(cos($radians)*$radius+$radius);
 echo ' <div class="circle" style="margin-left:'.$left.'px;margin-top:'.$top.'px;">'.(10-$x).'</div>';
 }
 ?>
 </div>
 </div>
</body>
</html>

 

WordPress Besleme Kaynağı ile Bot Yapma

İstek üzerine daha önce yapmış olduğum bir örneği paylaşıyorum.

 <?php
$url = 'http://ulusanyazilim.com/feed/';

 $rss = new DOMDocument();
 $rss->load($url);
 $feed = array();
 foreach ($rss->getElementsByTagName('item') as $node) {
 $item = array (
 'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
 'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
 'pubDate' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue,
 'description' => $node->getElementsByTagName('description')->item(0)->nodeValue,
 'content' => $node->getElementsByTagName('encoded')->item(0)->nodeValue

 );
 array_push($feed, $item);
 }
 echo '<ul class="haberlistesi h4">';
 foreach($feed as $p){
 echo '<li>';
 echo '<img width="18" src="'.base_url().'img/product.gif" > 
 <a href="'.$p["link"].'" title="'.$p["title"].'" alt="'.$p["title"].'">
 '.$p["title"].'
 </a>';
 echo '</li>';
 }
 
 echo '</ul>';
?>

 

Html Karakter Sınırlandırma

$al=new cutHTML;
$al->text="<p><a>Merhaba</a></p>";
$al->lenght="5";
echo $al->write();
//Çıktısı "Merha"
class cutHTML {
 public $text="";
 public $length="";
public function write(){
 $this->text=htmlspecialchars_decode($this->text);
 $entities = array('À'=>'&Agrave;','à'=>'&agrave;','Á'=>'&Aacute;','á'=>'&aacute;','Â'=>'&Acirc;','â'=>'&acirc;',
 'Ã'=>'&Atilde;','ã'=>'&atilde;','Ä'=>'&Auml;','ä'=>'&auml;','Å'=>'&Aring;','å'=>'&aring;','Æ'=>'&AElig;','æ'=>'&aelig;',
 'Ç'=>'&Ccedil;','ç'=>'&ccedil;','?'=>'&ETH;','?'=>'&eth;','È'=>'&Egrave;','è'=>'&egrave;','É'=>'&Eacute;','é'=>'&eacute;',
 'Ê'=>'&Ecirc;','ê'=>'&ecirc;','Ë'=>'&Euml;','ë'=>'&euml;','Ì'=>'&Igrave;','ì'=>'&igrave;','Í'=>'&Iacute;','í'=>'&iacute;',
 'Î'=>'&Icirc;','î'=>'&icirc;','Ï'=>'&Iuml;','ï'=>'&iuml;','Ñ'=>'&Ntilde;','ñ'=>'&ntilde;','Ò'=>'&Ograve;','ò'=>'&ograve;',
 'Ó'=>'&Oacute;','ó'=>'&oacute;','Ô'=>'&Ocirc;','ô'=>'&ocirc;','Õ'=>'&Otilde;','õ'=>'&otilde;','Ö'=>'&Ouml;','ö'=>'&ouml;',
 'Ø'=>'&Oslash;','ø'=>'&oslash;','Œ'=>'&OElig;','œ'=>'&oelig;','ß'=>'&szlig;','?'=>'&THORN;','?'=>'&thorn;','Ù'=>'&Ugrave;',
 'ù'=>'&ugrave;','Ú'=>'&Uacute;','ú'=>'&uacute;','Û'=>'&Ucirc;','û'=>'&ucirc;','Ü'=>'&Uuml;','ü'=>'&uuml;','?'=>'&Yacute;',
 '?'=>'&yacute;','Ÿ'=>'&Yuml;','ÿ'=>'&yuml;');
 foreach ($entities as $key => $value){$ent[] = $key;$html_ent[] = $value;}
 $this->text = str_replace( $html_ent, $ent, $this->text );
 $this->text=strip_tags($this->text);
 $this->text=substr($this->text, 0, $this->length);
 $this->text=htmlspecialchars($this->text);
 return $this->text;
 }
}

noConflict ile Çakışma Önlemek

Birden fazla jquery ile çalışan kütüphane eklerseniz bazıları çalışmayabilir. İşte çözümü…

 <!DOCTYPE html>
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
 <script type="text/javascript">

 var $x = jQuery.noConflict();
 $x(function(){
 $x( ".a" ).click(function() {
 $x( this ).css("background-color","yellow");
 });
 });
 
 var $y = jQuery.noConflict();
 $y(function(){
 $y( ".a" ).click(function() {
 $y( this ).css("color","red");
 });
 });

 </script>
</head>
<body>
 <div class="a">test</div>
</body>
</html>

 

Transparan Açılır Kapanır Sabitlenmiş İletişim Formu

 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
 <style type="text/css">
 @import url(http://fonts.googleapis.com/css?family=Source+Sans+Pro);

.feed {
-webkit-transition: 0.3s;
transition: 0.3s;
-o-transition: 0.3s;
-ms-transition: 0.3s;
-moz-transition: 0.3s;
 position:absolute;
 margin:-150px 320px;
 padding:2px 4px;
 border: 1px solid rgba(0,0,0,.2);
 -moz-border-radius: 5px;
 -webkit-border-radius: 5px;
 border-radius: 5px;
 -moz-background-clip: padding;
 -webkit-background-clip: padding-box;
 background-clip: padding-box;
 background-color: #0082ff; 
 overflow: hidden; 
 z-index:9999;
 color:white;
 cursor:pointer;
}
#developer {
-webkit-transition: 0.3s;
transition: 0.3s;
-o-transition: 0.3s;
-ms-transition: 0.3s;
-moz-transition: 0.3s;
 position:fixed;
 top:100px;
 left:-340px;
 width: 320px;
 height: 333px;
 padding:20px;
 border: 1px solid rgba(0,0,0,.2);
 -moz-border-radius: 5px;
 -webkit-border-radius: 5px;
 border-radius: 5px;
 -moz-background-clip: padding;
 -webkit-background-clip: padding-box;
 background-clip: padding-box;
 background: rgba(0, 0, 0, 0.5); 
 -moz-box-shadow: 0 0 13px 3px rgba(0,0,0,.5);
 -webkit-box-shadow: 0 0 13px 3px rgba(0,0,0,.5);
 box-shadow: 0 0 13px 3px rgba(0,0,0,.5);
 overflow: hidden; 
 z-index:9998;
 padding-top:10px;
}

#developer textarea{
 background: rgba(255, 255, 255, 0.4); 
 width: 296px;
 height: 90px;
 border: 1px solid rgba(255,255,255,.6);
 -moz-border-radius: 4px;
 -webkit-border-radius: 4px;
 border-radius: 4px;
 -moz-background-clip: padding;
 -webkit-background-clip: padding-box;
 background-clip: padding-box; 
 display:block;
 font-family: 'Source Sans Pro', sans-serif;
 font-size:18px;
 color:#fff;
 padding-left:20px;
 padding-right:0px;
 padding-top:12px;
 margin-bottom:10px;
 overflow:hidden;
}

#developer input {
 width: 296px;
 height: 48px;
 border: 1px solid rgba(255,255,255,.4);
 -moz-border-radius: 4px;
 -webkit-border-radius: 4px;
 border-radius: 4px;
 -moz-background-clip: padding;
 -webkit-background-clip: padding-box;
 background-clip: padding-box; 
 display:block;
 font-family: 'Source Sans Pro', sans-serif;
 font-size:18px;
 color:#fff;
 padding:auto 10px;
 margin-bottom:10px;
}

#developer input[type=submit] {
 cursor:pointer;
}

#developer input.name {
 background: rgba(255, 255, 255, 0.4); 
 padding-left:20px;
}

#developer input.email {
 background: rgba(255, 255, 255, 0.4);
 padding-left:20px;
}

#developer input.message {
 background: rgba(255, 255, 255, 0.4) ;
 padding-left:20px;
}

::-webkit-input-placeholder {
 color: #fff;
}

:-moz-placeholder{ 
 color: #fff; 
}

::-moz-placeholder {
 color: #fff;
}

:-ms-input-placeholder { 
 color: #fff; 
}

#developer input:focus, #developer textarea:focus { 
 background-color: rgba(0, 0, 0, 0.2);
 -moz-box-shadow: 0 0 5px 1px rgba(255,255,255,.5);
 -webkit-box-shadow: 0 0 5px 1px rgba(255,255,255,.5);
 box-shadow: 0 0 5px 1px rgba(255,255,255,.5);
 overflow: hidden; 
}

.btn {
 width: 138px;
 height: 44px;
 -moz-border-radius: 4px;
 -webkit-border-radius: 4px;
 border-radius: 4px;
 display:block;
 border: 1px solid #253737;
 background: #416b68;
 background: -webkit-gradient(linear, left top, left bottom, from(#6da5a3), to(#416b68));
 background: -webkit-linear-gradient(top, #6da5a3, #416b68);
 background: -moz-linear-gradient(top, #6da5a3, #416b68);
 background: -ms-linear-gradient(top, #6da5a3, #416b68);
 background: -o-linear-gradient(top, #6da5a3, #416b68);
 background-image: -ms-linear-gradient(top, #6da5a3 0%, #416b68 100%);
 padding: 10.5px 21px;
 -webkit-border-radius: 6px;
 -moz-border-radius: 6px;
 border-radius: 6px;
 -webkit-box-shadow: rgba(255,255,255,0.1) 0 1px 0, inset rgba(255,255,255,0.7) 0 1px 0;
 -moz-box-shadow: rgba(255,255,255,0.1) 0 1px 0, inset rgba(255,255,255,0.7) 0 1px 0;
 box-shadow: rgba(255,255,255,0.1) 0 1px 0, inset rgba(255,255,255,0.7) 0 1px 0;
 text-shadow: #333333 0 1px 0;
 color: #e1e1e1;
}

.btn:hover {
 border: 1px solid #253737;
 text-shadow: #333333 0 1px 0;
 background: #416b68;
 background: -webkit-gradient(linear, left top, left bottom, from(#77b2b0), to(#416b68));
 background: -webkit-linear-gradient(top, #77b2b0, #416b68);
 background: -moz-linear-gradient(top, #77b2b0, #416b68);
 background: -ms-linear-gradient(top, #77b2b0, #416b68);
 background: -o-linear-gradient(top, #77b2b0, #416b68);
 background-image: -ms-linear-gradient(top, #77b2b0 0%, #416b68 100%);
 color: #fff;
 }
.btn:active {
 margin-top:1px;
 text-shadow: #333333 0 -1px 0;
 border: 1px solid #253737;
 background: #6da5a3;
 background: -webkit-gradient(linear, left top, left bottom, from(#416b68), to(#416b68));
 background: -webkit-linear-gradient(top, #416b68, #609391);
 background: -moz-linear-gradient(top, #416b68, #6da5a3);
 background: -ms-linear-gradient(top, #416b68, #6da5a3);
 background: -o-linear-gradient(top, #416b68, #6da5a3);
 background-image: -ms-linear-gradient(top, #416b68 0%, #6da5a3 100%);
 color: #fff;
 -webkit-box-shadow: rgba(255,255,255,0) 0 1px 0, inset rgba(255,255,255,0.7) 0 1px 0;
 -moz-box-shadow: rgba(255,255,255,0) 0 1px 0, inset rgba(255,255,255,0.7) 0 1px 0;
 box-shadow: rgba(255,255,255,0) 0 1px 0, inset rgba(255,255,255,0.7) 0 1px 0;
 }
 </style>
 <form id="developer">
 <input name="name" placeholder="Adınız?" class="name" required />
 <input name="emailaddress" placeholder="E-Mail Adresiniz?" class="email" type="email" required />
 <input name="url" placeholder="url" class="email" type="url" disabled value="<?php echo "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];?>"/>
<textarea rows="4" cols="50" name="subject" placeholder="Hata Raporu" class="message" required></textarea>
 <input name="submit" class="btn" type="submit" value="Bildir" />
 <div class="feed">+</div>
 </form>
 <script type="text/javascript">
 var deger=1;
$(".feed").click(function() {

 if(deger == 1){
 $("#developer").css("left", "+=340");
 deger=0;
 }else{
 $("#developer").css("left", "-=340");
 deger=1;
 }
});
 </script>