我目前使用下面的正則表達式來驗證網址:需要一個正則表達式來驗證URL並支持20%和()
^(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~\/|\/)?(?#Username:Password)(?:\w+:\[email protected])? (?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|edu|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?#Port)(?::[\d]{1,5})?(?#Directories)(?:(?:(?:\/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|\/)+|\?|#)?(?#Query)(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?#Anchor)(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?$
我借這個從什麼地方在網絡上(不記得其中),以改善在此:
^((https?|file|ftp|gopher|news|nntp):\/\/)([a-z]([a-z0-9\-]*\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel)|(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))(\/[a-z0-9_\-\.~]+)*(\/([a-z0-9_\-\.]*)(\?[a-z0-9+_\-\.%=&]*)?)?(#[a-z][a-z0-9_]*)?$
但是,這些都不是能夠驗證這個URL(其應該是有效的):
http://somedomain.com/users/1234/images/Staff%20Photos%202008/FirstName%20LastName_1%20(Small).jpg
問題是%20和圓括號()。儘可能地嘗試,我無法得到上面的任何一個正則表達式來正確驗證上面的url而不會破壞別的東西。我沒有經驗寫正則表達式,所以也沒有幫助。所有其他網絡搜索結果我發現這樣的愚蠢的東西失敗:
http://www.test..com
幫助將不勝感激。
我不認爲正則表達式是正確的工具。爲什麼你必須使用正則表達式有什麼原因嗎? – 2010-01-14 23:53:17
你在用什麼語言?也許有另一種方法來驗證它。 – 2010-01-15 02:53:38
嗨,我實際上使用C#在ASP.NET MVC中編寫Web應用程序。我的驗證層使用Regex來確保輸入的URL有效(很像電子郵件和電話驗證)。這些URL指示Internet和Intranet上的文件位置。當表單發佈時,您是否看到比正則表達式更好的方法來執行此驗證? – 2010-01-15 15:50:22