2013-10-31 85 views
2

应该如何填写有效的域名正则表达式满足以下条件。有效的域名正则表达式

  1. 每个标签最多63个字符长最少1个字符
  2. 包含数字,字母和“ - ”,但
  3. 不应该开始和结束“ - ”
  4. 最大域名长度为255个字符的最小1.

例如

一些有效的组合:

a 
a.com 
aa-bb.b 

我创造了这个^(([a-z0-9]){1,63}\.?){1,255}$

但目前其没有验证 ' - ' 组成部分的要求(它,丢失)

有什么办法?

plz纠正我,如果我错了。

+0

使用urlparse!正则表达式不是一切的答案。 –

回答

2

并强制以'。'结尾。 : 在这里我找到了解决方案

"^(((([A-Za-z0-9]+){1,63}\.)|(([A-Za-z0-9]+(\-)+[A-Za-z0-9]+){1,63}\.))+){1,255}$" 
+0

它不必结束一段时间。介意解释?一段时间通常出现在域的最后2到4个字符中,在域扩展之前。 – User

+0

是的,在期末有期限是可选的。需要相应改进。 –

+0

我决定去用这个:http://stackoverflow.com/questions/2532053/validate-a-hostname-string – User

1

请勿使用正则表达式解析域名,请使用urllib.parse

如果您需要在HTML中查找有效的域名,请使用正则表达式[ <>]分割页面文本,然后使用urllib.parse解析每个结果字符串。

+2

urllib.parse不能确保有效的域名。 'netloc'可能包含“localhost”或错误的URL格式(例如“http:// example”,“http://格式错误”) –

0

试试这个:

^(([a-z0-9]\-*[a-z0-9]*){1,63}\.?){1,255}$ 
+0

谢谢,我试过了,但没有验证 - 最后。 –

0

使用|运营商在RE其次是 ' - ' ..保证让您逃脱字符 ' - ' 用\

1

也许这:

^(([a-zA-Z0-9\-]{1,63}\.?)+(\-[a-zA-Z0-9]+)){1,255}$