我想使用Regex验证域名,到目前为止这是我的正则表达式:
/^(([a-zA-Z]{1})|([a-zA-Z]{1}[a-zA-Z]{1})|([a-zA-Z]{1}[0-9]{1})|([0-9]{1}[a-zA-Z]{1})|([a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9])\.[a-zA-Z]{2,3})$/;
上述行还允许地址中有多个dashes
,如this--is.com
这显然是错误的,如何解决这个问题?
我需要以最简单的方式使用域名,例如google.com
要验证only
,不允许使用协议,子域等。
所以这些都可以:
google.com
yahoo-new.com
newdomain.travel
不行:
http://google.com
www.yahoo.com
http://www.blah.com
答案 0 :(得分:1)
behz4d,这是一个简单的表达式,可以满足您的需求。但我们可能想要调整它(见下文)。
^[a-zA-Z]+(?:-?[a-zA-Z\d])+\.[a-zA-Z]{2,6}$
匹配
google.com
yahoo-new.com
newdomain.travel
this-is-it.com
但不是
this--it.com [per your requirement]
http://google.com
www.yahoo.com
http://www.blah.com
Javascript不支持(?i)内联不区分大小写,因此我指定将字母完全指定为[a-zA-Z]。另一种选择是在正则表达式调用中打开不区分大小写。
请注意,最后{2,6}表示我们仅匹配最多包含6个字符的TLD,以允许您的“旅行”TLD。最初,你有{2,3},这将允许“com”而不是“旅行”。但是,有更长的顶级域名(TLD),我建议要求更长的时间,例如{2,20},或者只是不限制TLD的大小:
^[a-zA-Z]+(?:-?[a-zA-Z\d])+\.[a-zA-Z]+$
另外,最初,您不允许第一个字符中的数字。但是数字是允许的。所以你可以修改它到
^[a-zA-Z\d]+(?:-?[a-zA-Z\d])+\.[a-zA-Z]+$