[英]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.