简单的JS域验证器,不允许协议,子域等

时间:2014-04-19 17:58:05

标签: javascript regex

我想使用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

1 个答案:

答案 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]+$