2010-05-04 14 views
9

dizesinde http: // olmadan http: // ile başlayıp başlamadığını görmek için bir preg_match dizisine ayrılmış diziyi nasıl kontrol ettiğimi merak ediyorum. Zaten http://www'u kontrol eden bir tane var.Preg_match kullanarak bir url tespit ediliyor mu?

function isValidURL($url) 
{ 
return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url); 
} 

$stringToArray = explode(" ",$_POST['text']); 

    foreach($stringToArray as $key=>$val){ 
    $urlvalid = isValidURL($val); 
    if($urlvalid){ 
    $_SESSION["messages"][] = "NO URLS ALLOWED!"; 
    header("Location: http://www.domain.com/post/id/".$_POST['postID']); 
    exit(); 
    } 
    } 

Teşekkürler! Stefan

+2

Çalıştığınız esere göre denediğiniz bazı kodları gösterebilir misiniz? Buradaki daha fazla insan, üzerinde çalıştığınız bir sorunu çözmenize yardımcı olacak yanıtı size verecektir. Sadece bir gereksinim almak ve bir cevap üretmek yapmak için para aldığım şey. –

+0

çalışma koduna şu ana kadar çalışma kodunu ekledi –

cevap

11

Sen gibi bir şey istiyorum başlangıçta http:// veya www ile eşleşir. Ben ilgisini çekebilecek URL'lerin her türlü çok kapsamlı regex gönderdi Cesur Fireball |

+0

Sadece bir not: http://wwwtumblr.com gibi URL'ler de bu regex'i iletecektir. – joshholat

+4

bu doğru değil ... ikinci grup '' www'' sonra '' 'www'' gerektirir. Ayrıca, regexp'i 'wwwtumblr.com' a karşı test ettim: http://www.solmetra.com/scripts/regex/index.php ve o geçmedi. Ancak, bu * www.tumblrcom gibi bir şeyle eşleşecektir. üçüncü grupta en büyük hata muhtemelen unescaped '.' dir. bu günlerde genellikle ([a-z0-9 -] \.) + ([a-z0-9 -]) 'alt alan adları ve tld ile eşleşir. –

-2

implode($myarray, '').strstr("www.")==0'u deneyin. Bu, dizinizi bir dizeye böler, ardından www. dizgenin başlangıcında olup olmadığını kontrol eder (dizin 0). |

%^((https?://)|(www\.))([a-z0-9-].?)+(:[0-9]+)?(/.*)?$%i 

bu kullanıyor:

+0

İlk önce dizeyi, örn. merhaba nasılsınız www.google.com –

+0

http://daringfireball.net/2009/11/liberal_regex_for_matching_urls – user956584

0

Ben mesela içinden ilk başta dize patlayabilir

Dizgeyi patlatın ve foreach ifadesini kullanın.

Örn: Eğer strpos dönebilirsiniz çünkü === operatörü kullanmak zorunda

$string = "hello how are you www.google.com"; 
$string = explode(" ", $string); 
foreach ($string as $word){ 
    if ((strpos($word, "http://") === 0) || (strpos($word, "www.") === 0)){ 
    // Code you want to excute if string is a link 
    } 
} 

Not false olmak görünecek bir 0 dönecektir.

+0

Yalnızca bağlantıyı nasıl çıkarırsınız? – Sobiaholic

İlgili konular