Can*_*ith 27
^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\.?$
批准的答案验证包含多个点的无效主机名(例如.com).这是我提出的正则表达式,我认为完全符合RFC要求允许的内容(减去某些解析器支持的结尾"."以短路相对命名和强制FQDN解析).
规格:
<hname> ::= <name>*["."<name>]
<name> ::= <letter-or-digit>[*[<letter-or-digit-or-hyphen>]<letter-or-digit>]
Run Code Online (Sandbox Code Playgroud)
正则表达式:
^([a-zA-Z0-9](?:(?:[a-zA-Z0-9-]*|(?<!-)\.(?![-.]))*[a-zA-Z0-9]+)?)$
Run Code Online (Sandbox Code Playgroud)
我自己测试了不少排列,我认为这是准确的.
此正则表达式也不进行长度验证.RFC要求对点和名称之间的标签进行长度限制,但是通过检查完整字符串长度并通过拆分".",可以在验证此正则表达式后,通过第二次和第三次传递轻松检查长度.并验证所有子串长度.例如,在JavaScript中,标签长度验证可能如下所示:example..com
.
替代正则表达式(没有负面的背后,礼貌@thom_nic):
"example.com".split(".").reduce(function (prev, curr) { return prev && curr.length <= 63; }, true)