Мне было интересно, как я могу проверить строку, разбитую на массив, на 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).