使用preg_match检测网址?在字符串中没有http://

Ste*_*n P 11 php regex url preg-match

我想知道如何在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();
     }
     }
Run Code Online (Sandbox Code Playgroud)

谢谢!斯特凡

Igo*_*any 13

你想要的东西:

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

这是使用| 匹配任何一个http://www在开头.我更改了分隔符,%以避免与|

  • 这不是真的......第二组是`(www \.)`,在`www.之后需要一个`.`.另外,我在这里对'wwwtumblr.com'测试了正则表达式:http://www.solmetra.com/scripts/regex/index.php并没有通过.但是,**会匹配像www.tumblrcom这样的东西.最大的错误可能是第三组中未转义的`.`.这些天我通常做`([a-z0-9 - ] \.)+([a-z0-9 - ])`以匹配子域和tld. (6认同)

小智 9

Daring Fireball的John Gruber针对可能感兴趣的所有类型的URL发布了一个非常全面的正则表达式.你可以在这里找到它:

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