اگر از preg_match و بقیه توابع این بسته استفاده می کنید، از همون الگویی که قرار دادم استفاده کنید، ولی eregi خودش case insensitive هست، و همون کد اولی بدرستی کار می کنه و کاراکترهای کوچیک و بزرگ رو در نظر می گیره.خروجی no
ولی یه سوال، حالا اگر بخوایم کاراکترهایی که بیش از 3 بار تکرار شده رو replace و بجای اونها همون کاراکترها رو یک بار نمایش بدیم، چه راهی پیشنهاد می کنید؟ مثال:
Khhhhhobiiii
Khobi
function Check($str){
foreach(str_split($str) as $k=>$one){
if($str[$k-1]==$one&&$one==$str[$k+1]){ return false; };
} return true;
}
$str='test the cooode';
Check($str);
function Check($str){
$patt = "a{3,}|b{3,}|c{3,}|d{3,}|e{3,}|f{3,}|g{3,}|h{3,}|i{3,}|j{3,}|k{3,}|l{3,}|m{3,}|n{3,}|o{3,}|p{3,}|q{3,}|r{3,}|s{3,}|t{3,}|v{3,}|u{3,}|w{3,}|x{3,}|y{3,}|z{3,}";
if(!eregi($patt,$str)){ return false; };
}
$str='test the cooode';
Check($str);
داود یکم به کد دقت کن درستهسلام کوروش جان ، بله این راه شما منطقی است ، اما فکر نمی کنی هین کدی که زیر نوشته ای اشتباه باشه ؟
$str مگه این آرایه است که داری اینطوری ازش مقدار می گیری ؟ مشکل دیگه ای که داره اینه که اگر $k = 0 باشه توی آرایه ما خونه ی -1 تعریف نشده
داود یکم به کد دقت کن درسته
تابع str_split رو ببین رشته رو میکنه آرایه
اگر error_repoting فعال باشه ممکنه 2 تا noice بگیره که اشکالی نداره
$k هم هیج وقت نمیشه که 0 بشه
<?PHP
function Check($str){
$a = str_split( $str );
foreach( $a as $k => $one )
{
if( $a[$k-1] == $one && $one==$a[$k+1])
{
return false;
}
}
return true;
}
$str='test the coooode';
if( Check($str) )
{
echo "This Is Valid !";
} else
{
echo "This Is InValid !";
}
?>
کوروش مثال اینجارو ببین : http://ir.php.net/str_split اولین خونه آرایه 0 هست دیگه !
بعدشم بهتر نبود اینطوری کد رو می نوشتی ؟
PHP:<?PHP function Check($str){ $a = str_split( $str ); foreach( $a as $k => $one ) { if( $a[$k-1] == $one && $one==$a[$k+1]) { return false; } } return true; } $str='test the coooode'; if( Check($str) ) { echo "This Is Valid !"; } else { echo "This Is InValid !"; } ?>
نه خیر !!!
چرا یه متغییر $a بیشتر . اضافه کنم؟!؟
در ضمن . من دوست دارم if رو این شکلی بنویسم؟!! اشکالی داره؟! جا هم کمتر میگیره؟!
اگر شما فکر بهتری داری بگذار . چرا به برنامه نویسی من گیر میدی؟!؟!![]()
کوروش جان قصد جسارت نداشتما ! من اینو اینطوری نوشتم که هرکی می یاد می بینه بتونه متوجه بشه که چه کار کردی ( حداقل ساده تره ) اگه بخوای اصولی کار کنی ، درستش اینه که $a رو تعریف کنی ، باید جوری باشه که error_reporting در حالت on نیز اروری نده !
البته شما استاد من هستید ، اما من فکر اینو می کنم که اگه توی یه سرور error_reporting روشن بود ، چه کار باید کرد ؟ درست می شه off کرد ، اما برنامه اصولی اینه که هیچ اروری مشاهده نشه ! این یه نظر شخصی هست ، شاید هیچ کس موافق این نظر من نباشه ، اما خوب نظره و واسه هر کس محترم !
<?php
$sasan = "Salam Man Sasan Nobakht Hastam !!!!";
echo $sasan[7];
?>
function Check($n){
$l=strlen($n);
for($i=0;$i<=$l;$i++){
if($n[$i-1]==$n[$i]&&$n[$i]==$n[$i+1]) {
return false;
};
}; return true;
};
var_dump(Check('test the cooode'));
function Check($n){
$l=strlen($n);
$n[-1]=$n[$l+1]='';
for($i=0;$i<=$l;$i++){
if($n[$i-1]==$n[$i]&&$n[$i]==$n[$i+1]) {
return false;
};
}; return true;
}
var_dump(Check('test the cooode'));
می خوای تکه کلام تورو که داداشیه بگیم ؟چقدر جان جان میکنین شما ها![]()
ممنون ، نکته جالبی بود ، تشکرهر رشته خودش یک آرایه است !!!!!! :razz:
[/php]برای کسای که با NOTICE مشکل دارن![]()