使用带有括号和插入符号的regex问题验证URL


Validate URL with regex issue with parenthesis and the caret

对于初学者来说,我已经检查了其他几个regex线程,这不是经常被问到的"如何使用regex验证URL"的问题。

我正在检查引用的URL是http还是https,以及"子域"是否由"staging"、"www"或"search"组成。

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

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

有什么想法吗?

此外,在.com部分之后,我将如何允许任何内容?出于某种原因,我可以在URL前面添加字符,例如2http://staging.mysite.com仍然有效,为什么这样?

edit:我想我的浏览器可能已经缓存了原始regex脚本,因为原始问题现在已经修复。

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

我正在进行preg_match,我想它只是检查字符串是否包含上述要求,而不是检查它是否真的以http或https 开头

$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)开头。