【问题标题】:Validate URL with regex issue with parenthesis and the caret使用带括号和插入符号的正则表达式问题验证 URL
【发布时间】:2012-02-20 22:49:11
【问题描述】:

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

我正在检查引用 URL 是 http 还是 https,并且“子域”由“staging”、“www”或“search”组成。

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

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

有什么想法吗?

另外,我将如何在 .com 部分之后允许任何内容?而且由于某种原因,我可以在 URL 前面添加字符,例如 2http://staging.mysite.com 仍然可以使用,这是为什么呢?

编辑:我猜我的浏览器可能已经缓存了原来的正则表达式脚本,因为原来的问题现在已经解决了。

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

我正在做一个 preg_match,我猜它只是检查字符串是否包含上述要求,而不是检查它是否实际上以 http 或 https 开头

【问题讨论】:

  • 错误是什么?括号很好。 (你的点匹配一切,但没什么大不了的)。也尝试转义正斜杠。 '\/'
  • @sweaver2112 出于某种原因,即使 URL 实际上不是以 http 或 https 开头,字符串也会在 preg_match 中验证。也就是说,我可以在 http 之前添加任何内容,只要 URL 的其余部分完好无损,preg 匹配和正则表达式就会通过,即使它不是正确的。
  • 将字符串的开头添加到您的模式中,如下所示:^

标签: php regex


【解决方案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) 开头的字符串。

【讨论】:

  • 你明白了,非常感谢你,先生!我将不得不查找为什么正则表达式以 ~ 开头和结尾,但感谢您的时间和帮助。
  • 那是任意的。如果你愿意,你可以使用斜线。如果这样做,您将不得不转义模式中的斜线:preg_match("/^(https|http):\/\/(staging|www|search)\.mysite.com/", $string, $matches);
猜你喜欢
  • 1970-01-01
  • 2014-10-19
  • 1970-01-01
  • 1970-01-01
  • 2020-10-29
  • 2012-04-28
  • 2023-04-08
  • 1970-01-01
相关资源
最近更新 更多