Php正则表达式,url验证,域名中的以下点是否有效?

时间:2015-04-07 10:19:21

标签: php regex

我在验证第2组时遇到问题,第2组是(子)域和扩展名。

我的正则表达式:/^(http:[\/]{2})([\w\d\-\_\.]+)(\/(?:[\/\w\W]+)?)?$/

问题:([\w\d\-\_\.]+)

问题:http://www.....google....com/stuff有效,我尝试[\w\d\-\_][(?<!\.)\.(?!\.)]+,但唉它没有用。

如何制作它,以便在.后面..前面{{1}}时,正则表达式将返回false。

https://regex101.com/r/fS9dG7/10

2 个答案:

答案 0 :(得分:2)

您可以使用否定前瞻:

~^https?:/{2}(?!.*?\.\.)([\w\d.-]+)(/.*)?$~

RegEx Demo

在PHP中,您也可以使用parse_url函数来解析URL。

(?!.*?\.\.)是一个消极的前瞻,不允许2个点。

答案 1 :(得分:1)

您可以使用此版本的your regex

^(http:[\/]{2})((?![^\/]*?\.{2}[^\/]*?)[\w\d\-\_\.]+)(\/(?:[\/\w]+)?)?$

问题在于\W(与同一角色类中的\w一起)匹配所有内容,甚至是新行。