Обнаружение URL-адреса с помощью preg_match? без http: // в строке

Мне было интересно, как я могу проверить строку, разбитую на массив, на preg_match, чтобы узнать, началось ли с www. У меня уже есть проверка на http: // www .

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

Благодаря! Стефан

Вы хотите что-то вроде:

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

это использует | для соответствия либо http:// или www в начале. Я изменил разделитель на % чтобы избежать столкновения с |

Джон Грубер из Daring Fireball опубликовал очень всеобъемлющее регулярное выражение для всех типов URL-адресов, которые могут представлять интерес. Вы можете найти это здесь:

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

Сначала я взорву строку, поскольку URL-адрес может быть на полпути через него, например, 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 .

Попробуйте implode($myarray, '').strstr("www.")==0 . Это приводит к распаду вашего массива в одну строку, а затем проверяет, есть ли www. находится в начале строки (индекс 0).