簡體   English   中英

用於驗證 URL 或域名的正則表達式。

[英]Regular Expression to validate a URL or domain name.

有人可以讓我知道我的正則表達式有什么問題嗎? 我試圖驗證 URL 的開頭,主要是主機名(即 www.yahoo.com)。

Regular Expression: ^(((ht|f)tp(s?))\:\/\/)?(www.)?([a-zA-Z0-9\-\.]{1,63})+\.([a-zA-Z]{2,5})$

Testing Values:

test.com – passes

test.c2om – fails 

test.test.com – passes

test.test.c2om – fails 

test.test.test.com – passes 

test.test.test.c2om – INVALID REGEX PATTERN 

這應該返回 false,但不返回任何內容,同時使用 javascript 和 c#... 如果您刪除對子域大小的 {1,63} 限制,它可以工作...

您創建了一個災難性模式- 引擎將嘗試以多種方式匹配([a-zA-Z0-9\-\.]{1,63})+直到失敗。 一個簡單的解決方案是刪除{1,63} ,正如您所指出的,它似乎並沒有添加任何東西。
另一種選擇是使用點作為錨點,因此您不能在它們之間回溯(這只為您提供了一種匹配文本的方法,並且假設您正在嘗試做的事情):

([a-zA-Z0-9\-]{1,63}\.)*[a-zA-Z0-9\-]{1,63}

請記住,在域名中假設全 ASCII 英文字母不再是非常正確的。 例如http://אתר.קום是合法的(且有效的)url。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM