2013-10-31 126 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}$