2

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

“二级域名”是指放在 http:// 或http://www..com(.co、.info、.etc)之间的字母、数字、句号和/或破折号的组合。

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

这种模式:

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

匹配有效域名,例如 stackoverflow、StackOverflow、stackoverflow.co(如在 stackoverflow.co.uk 中)、stack-overflow 或 stackoverflow123。

但是,相同的模式也可以匹配 stack...overflow、stack---over--flow、........、-------- 甚至 .. 和 -。

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

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

先感谢您!

4

2 回答 2

2

我认为这样的事情应该可以解决问题:

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

这试图做的是

从字符串的开头开始,在结尾结束

一个或多个字母或数字
后跟点或连字符

上述组重复 0 次或多次

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

于 2013-02-14T16:04:07.690 回答
1

假设您正在寻找一个不允许两个连续 . 或 - 您可以使用:

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

正则表达式演示

于 2013-02-14T16:03:07.760 回答