应该如何是有效的域名正则表达式,它完全满足以下条件。
- 每个标签最多 63 个字符,最少 1 个字符
- 包含数字、字母和'-',但是
- 不应以“-”开头和结尾
- 域名最大长度 255 个字符 最少 1 个。
例如
一些有效的组合:
a
a.com
aa-bb.b
我创造了这个^(([a-z0-9]){1,63}\.?){1,255}$
但目前它没有根据需要验证“-”部分(它是,缺失)
有什么办法吗?
如果我错了,请纠正我。
并且必须以“。”结尾 :在这里我找到了解决方案
"^(((([A-Za-z0-9]+){1,63}\.)|(([A-Za-z0-9]+(\-)+[A-Za-z0-9]+){1,63}\.))+){1,255}$"
此表达式应满足所有要求:
^(?=.{1,255}$)(?!-)[A-Za-z0-9\-]{1,63}(\.[A-Za-z0-9\-]{1,63})*\.?(?<!-)$
.
也许是这样:
^(([a-zA-Z0-9\-]{1,63}\.?)+(\-[a-zA-Z0-9]+)){1,255}$
不要重新发明轮子。您可以使用库,例如验证器。或者您可以复制他们的代码:
pip install validators
import validators
if validators.domain('example.com')
print('this domain is valid')
万一您发现错误,您可以修复并报告错误。
不要使用正则表达式解析域名,使用urllib.parse。
如果您需要在 HTML 中查找有效域名,则使用正则表达式拆分页面文本,[ <>]
然后使用 urllib.parse 解析每个结果字符串。
使用 | RE 中的运算符后跟“-”.. 确保您使用 \ 转义文字“-”
试试这个:
^(([a-z0-9]\-*[a-z0-9]*){1,63}\.?){1,255}$