PHP RegEx:一种验证二级域的模式


PHP RegEx: a Pattern to Validate the Second Level Domain

注意:这是关于正则表达式的PHP风格的理论问题,而不是关于PHP验证的实际问题。我只是使用域名,因为没有更好的例子。

"二级域"是指位于http://或http://www.和.com(.co、.info等)之间的字母、数字、句点和/或破折号的组合。

我只对使用英语拉丁字母的二级域名感兴趣。

这种模式:

[A-Za-z0-9.-]+

匹配有效域名,如stackoverflow、stackoverflow,stackoverlow.co(如stackoverflow.co.uk中所示),stackoverflow或stackoverlow123。

然而,同样的模式也会匹配类似stack。。。溢流,堆叠---溢流,…………..,--------,甚至。和-。

如何重写该模式,以指示句点和破折号,即使它们可以在一个节点中多次使用,

  • 不能在没有其他符号的情况下使用
  • 不能并排放置两次或两次以上
  • 并且不能放置在节点的开头或结尾

提前谢谢!

我认为应该这样做:

^([a-zA-Z0-9]+[.-])*[a-zA-Z0-9]+$

它试图做的是

从字符串开始,在结束

一个或多个字母或数字
然后是点或炒作

上述组重复0次或更多次

后面跟着一个或多个字母或数字

假设您正在寻找一个不允许两个连续的正则表达式。或者-您可以使用:

^[a-zA-Z0-9]+([-.][a-zA-Z0-9]+)*$

regexr演示