使用preg_match验证url的简单正则表达式总是返回false

时间:2013-03-16 14:02:56

标签: php regex validation

我知道有很多主题显示正则表达式来验证URL。还有一个FILTER_VALIDATE_URL函数,我也知道。

我想知道我的正则表达式错误,以了解它的错误。

我的RegularExpression应该在其前面使用http://或https://匹配网址。之后,它可以是任何角色,一个或多个。它应该以一个点结束,然后是一个包含2到5个字符的字符串a-z。

        $s = preg_match('^(http|https)://.+(\.[a-z]{2,5})$', $url);

我在http://regexpal.com/上尝试了这个RegularExpression。它匹配正确,但我的preg_match调用总是假的。任何人都可以向我解释这个RegularExpression的错误吗?

非常感谢

1 个答案:

答案 0 :(得分:3)

在PHP中,您需要在正则表达式语法中使用分隔符。分隔符可以是任何非字母数字,非反斜杠,非空白字符。大多数人使用/作为分隔符,但由于这显示在您的网址中,您可以使用其他字符,例如#以避免转义:

'#^(http|https)://.+(\.[a-z]{2,5})$#'

旁注:(http|https)将被捕获,因为它包含在括号中。你真的不需要这个,但只需编写https?也更简单,?使s成为表达式中的可选字符。