2010-05-04 12 views
9

में http: // के बिना मैं सोच रहा था कि मैं एक preg_match के खिलाफ एक सरणी में टूटी हुई स्ट्रिंग को कैसे देख सकता हूं यह देखने के लिए कि यह www के साथ शुरू हुआ है या नहीं। मेरे पास पहले से ही एक है जो http://www की जांच करता है।preg_match का उपयोग कर यूआरएल का पता लगाना? स्ट्रिंग

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(); 
    } 
    } 

धन्यवाद! स्टीफन

+2

क्या आप कुछ कोड दिखा सकते हैं जिस पर आपने काम किया है उस पर आधारित है? यहां पर अधिक लोग आपको उस समस्या को हल करने में मदद करेंगे जो आप काम कर रहे हैं जिससे आपको जवाब मिल सके। बस एक आवश्यकता प्राप्त करना और उत्तर देना एक ऐसा है जो मुझे करने के लिए भुगतान किया जाता है। –

+0

अब तक –

उत्तर

11

तुम कुछ की तरह चाहते हैं शुरुआत में http:// या www से मिलान करने के लिए। |

+0

बस एक ध्यान दें: http://wwwtumblr.com जैसे URL भी इस regex पारित करेंगे। – joshholat

+4

यह सच नहीं है ... दूसरा समूह '(www \।) है, जिसके लिए 'www.'' के बाद' .' की आवश्यकता है। भी, मैंने यहां 'wwwtumblr.com' के खिलाफ regexp का परीक्षण किया: http://www.solmetra.com/scripts/regex/index.php और यह पास नहीं हुआ। हालांकि, इस * होगा * www.tumblrcom की तरह मैच कुछ। सबसे बड़ी त्रुटि शायद नहीं छोड़ा जाएगा '.' तीसरे समूह में है। इन दिनों मैं आमतौर पर '([एक-Z0-9 -]। \) + ([एक-Z0-9 -])' उप डोमेन और TLD मैच के लिए। –

-2

implode($myarray, '').strstr("www.")==0 आज़माएं। यह आपके सरणी को एक स्ट्रिंग में फंसाता है, फिर जांचता है कि www. स्ट्रिंग (इंडेक्स 0) की शुरुआत में है या नहीं।

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

इस उपयोग कर रहा है |:

+0

पर काम करने वाले कोड में जोड़ा गया है, मैं पहले स्ट्रिंग को विस्फोट करता हूं क्योंकि यूआरएल इसके माध्यम से आधा रास्ता हो सकता है उदा। हैलो कैसे हैं आप www.google.com –

+0

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

8

डियरिंग फायरबॉल के जॉन ग्रबर ने रुचि के सभी प्रकार के यूआरएल के लिए एक बहुत ही व्यापक रेगेक्स पोस्ट किया है, जो मैंने ब्याज की हो सकती है, के लिए डेलीमीटर को % में बदल दिया है। आप इसे यहाँ पा सकते हैं:

http://daringfireball.net/2010/07/improved_regex_for_matching_urls

0

मैं जैसे यह माध्यम से पहली बार में स्ट्रिंग विस्फोट यूआरएल के रूप में आधा रास्ता हो सकता है hello how are you www.google.com

स्ट्रिंग को विस्फोट करें और foreach कथन का उपयोग करें।

उदाहरण के लिए:

$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 
    } 
} 

नोट आप === ऑपरेटर का उपयोग करने के लिए क्योंकि strpos लौट सकते है, एक 0 जो false प्रतीत होगा वापस आ जाएगी।

+0

कैसे आप लिंक केवल निकालने हैं? – Sobiaholic

संबंधित मुद्दे