注意:这是关于正则表达式的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演示