使用带括号和插入符的正则表达式问题验证URL

时间:2012-02-20 22:49:11

标签: php regex

对于初学者,我已经检查了其他几个正则表达式线程,这不是经常被问到“如何使用Regex验证URL”问题。

我正在检查引荐网址是http还是https,以及“子网域”是否包含“暂存”,“www”或“搜索”。

^(https|http)://(staging|www|search).mysite.com

(这个问题已经解决,编辑后的新问题)我相信我遇到的问题涉及与开头插入符号相邻的括号。

有什么想法吗?

另外,如何在.com部分之后允许任何内容?由于某种原因,我可以在URL前面的字符例如2http://staging.mysite.com仍然可以工作,为什么会这样?

编辑:我想我的浏览器可能已经缓存了原始的正则表达式脚本,因为现在修复了原始问题。

现在我唯一的问题是如何确保2http://staging.mysite.com不会验证?我认为插入符表示字符串必须以http或https开头。

我正在做一个preg_match,我想它只是检查字符串是否包含上述要求,但是没有检查它是否真的以http或https开头

1 个答案:

答案 0 :(得分:1)

$string = "https://www.mysite.com/foo/bar";

preg_match("~^(https|http)://(staging|www|search)\.mysite.com~", $string, $matches);

var_dump($matches);

array
  0 => string 'https://www.mysite.com' (length=22)
  1 => string 'https' (length=5)
  2 => string 'www' (length=3)

就像一个魅力。如果您不要求结束模式(使用$),则可以跟随任意字符。 2http://将无效,因为我们需要使用^开始使用字符串(https | http)。