views:

36

answers:

1

Hi,

I want to have the regular expression that makes sure the beginning of the string contains 'http://' and '/' and the end.

This is a longer version I came up with,

if(!preg_match("/(^http:\/\//", $site_http)) 
{
 $error = true;
 echo '<error elementid="site_http" message="site_http - Your link appears to be invalid. Please confirm that your link contains http:// at the start."/>';
}
elseif (!preg_match("/\/$/", $site_http)) 
{
 $error = true;
 echo '<error elementid="site_http" message="site_http - Your link appears to be invalid. Please confirm that your link has ended with a /."/>';
}

but I thought these two expressions can put together like below, but it wont work,

if(!preg_match("/(^http:\/\/)&(\/$)/", $site_http)) 
{
 $error = true;
 echo '<error elementid="site_http" message="site_http - Your link appears to be invalid. Please confirm that your link contains http:// at the start and a / at the end."/>';
}

the multiple expressions that I try to combine must be wrong! any idea?

thanks, Lau

+6  A: 
if(preg_match('/^http:\/\/.*\/$/', $site_http)) 
{
  ...
}

The ^http:\/\/ forces http:// at the front, the \/$ forces a slash at the end, and .* allows everything (and possibly nothing) between.

For example:

<?php

foreach (array("http://site.com.invalid/", "http://") as $site_http) {
  echo "$site_http - ";
  if (preg_match('/^http:\/\/.*\/$/', $site_http)) {
    echo "match\n";
  }
  else {
    echo "no match\n";
  }
}
?>

generates the following output:

http://site.com.invalid/ - match
http:// - no match
Greg Bacon
blast, you beat me to it. Was typing when it said one new answer. :)
Razor Storm
thank you so much, gbacon! legend! :-))
lauthiamkok
@lauthiamkok You're welcome! I'm glad it helps.
Greg Bacon