这是一种做我想做的事,但在我希望真实的情况下失败了。是的,我将在域中使用它,但是在有人继续讨论这对于任何域都不起作用之前,需要更多的东西来正确验证它,等等......这在我的使用中会工作得很好如果我能处理最后两个案例。我不需要验证正确的格式,只需要确保它处理我下面提到的情况。基本上我正在寻找:
- 任何 *.extension(a-z 超过 2 个字符)为 true
- 任何domain.extension或unlimited-subdomains.domain.extension为true
- 整个字符串以 * 开头的上述任一情况。说实话
到目前为止我得到了什么:
regex101.com of my current regex
/^(?:\*\.)?([a-z0-9-]{1,255}\.)+[a-z]{2,}$/i
(?:\*\.)?
- 可以选择以 * 开头。([a-z0-9-]{1,255}\.)*
- 0 个或多个 1-255 之间以 . 结尾的 a-z0-9-[a-z]{2,}
以 a-z 结尾,介于 2-?
我想要判断真/假的示例:
测试
- false.test
- false*.test
- truetest.test
- true*.test.test
- true
当前在 *.test
上失败 - 我希望这是真的。
编辑:
这“有效”,但引入了一个错误的新测试。 *.*.test
应该为 false。
/^((?:\*\.)?([a-z0-9-]{1,255}\.)+[a-z]{2,})|\*.[a-z]{2,}$/i
最佳答案
您可以使用此正则表达式:
/^(\*\.|([a-z0-9-]{1,255}\.))([a-z0-9-]{1,255}\.)*[a-z]{2,}$/i
说明:
^
- 从字符串开头匹配
(
- 创建群组
\*\.
- 匹配 EITHER
星号 *
和点 .
|
- 或
([a-z0-9-]{1,255}\.)
- 匹配以点 结尾的第一部分。
)
- 末端基团
([a-z0-9-]{1,255}\.)*
- 匹配以点结尾的重复部分 .
[a-z]{2,}$
- 匹配字符串的最后部分和结尾
请注意,中间部分是可选的,可以重复。
关于正则表达式帮助 - 1 个案例我需要处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74105155/