2013-12-19 93 views
-1

使用以下URL正則表達式模式進行URL驗證。正則表達式在JavaScript中的URL

/[[email protected]:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[[email protected]:%_\+.~#?&//=]*)?/gi; 

,但我需要排除.comhttp://google/應該工作。

需要爲此做些什麼改變?

+4

的任何影響,是不清楚你想要完成什麼。 – jfriend00

+0

從括號中的第一個'。'開始放置所有內容,並附上一個問號。然後返回並修復您現有的模式,該模式目前接受':::::。zz'和'??。aa'這些有效的URL。 – nnnnnn

+0

@ jfriend00'www.google.com'與正則表達式模式匹配,但'http:// google /'顯示不匹配錯誤。所以即時通訊尋找一個正則表達式模式,與URL'http:// google /' –

回答

1

只需將此部分:\.[a-z]{2,4}替換爲(\.[a-z]{2,4})?即可。

全正則表達式:

[[email protected]:%_\+.~#?&//=]{2,256}(\.[a-z]{2,4})?\b(\/[[email protected]:%_\+.~#?&//=]*)? 

並有demo

實際上,我們在這裏做的是使.xxxx可選,將其包裝在()中並使用?表示非貪婪狀態。

這將同時匹配:

http://www.google.com/ 

http://localhost/ 

警告:這是不是最有效的表達來完成你想要的東西,但它僅僅是最小的調整要求需要完成你想要的東西。

2

假設你想要所有的東西,包括沒有.com的url。

/[-a-z[email protected]:%_\+.~#?&//=]{2,256} 

(?:\.[a-z]{2,4})? // (?:) match group this is where the .com is captured 
        // ? quantifier 0 to 1 times 

\b(\/[[email protected]:%_\+.~#?&//=]*)?/gi 

JSFIDDLE

+0

+1顯示正確的地方在哪裏。com正在捕獲。 –

1

您更好的用戶從jquery.validate.js擴展這個長度表達。這是經過充分測試,並支持多語言網址。 不要害怕表達式中的unicode和十六進制表達式。它只支持多語言網址。請參閱this (Unicode Characters)瞭解哪些以下的unicode意味着

/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i 

你上面的表達式有很多缺陷的喜歡你的表達\b(\/[[email protected]:%_\+.~#?&//=]*)?的最後一部分本身對整個URL匹配,並且沒有以前的表達