2013-02-18 20 views
-1

我有一個谷歌網址沒有得到正常正則表達式的驗證。例如,asp.net提供了標準的正則表達式來應付網址,這就是:需要一個正確的表達式來應對此URL:

"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?" 

但是,當你得到一個谷歌的圈子網址:

https://plus.google.com/photos/114197249914471021468/albums/5845982797151575009/5845982803176407170?authkey=CKfNzLrhmenraA#photos/114197249914471021468/albums/5845982797151575009/5845982803176407170?authkey=CKfNzLrhmenraA

無法應付。

我想追加到年底下面的表達式:(\?.+)? 這基本上意味着該URL可以有後一個問號,然後任意數量的任何類型的字符,但不起作用。

整個表達式是:

"[Hh][Tt][Tt][Pp]([Ss])?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*(\?.+)?)?" 

出於某種原因,這並不複雜的URL工作的。 幫助表示讚賞。

+0

你從哪裏得到的ASP.NET URL正則表達式?可以鏈接到任何相關的文檔?這似乎是錯誤的。 – sinelaw 2013-02-18 17:59:12

+0

此外,你究竟在嘗試使用哪些網址?也許正則表達式不是這裏最好的方法。 – sinelaw 2013-02-18 17:59:48

+0

隨asp.net提供的工具箱「正則表達式驗證程序」可以選擇URL,我相信我列出的正則表達式來自該驗證程序。我所要做的只是讓用戶只輸入有效的網址格式。 – 2013-02-19 13:45:32

回答

0

我增加了錨^$本次測試的目的,躲過了/,因爲下面是一個JavaScript正則表達式文字,改變了&,其中有沒有生意在那裏,到&;,去掉了空間,並添加#第三字符集,它似乎好工作:

/^http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w.\/?%&;#=-]*)?$/.test( 
    'https://plus.google.com/photos/114197249914471021468/albums/5845982797151575009/5845982803176407170?authkey=CKfNzLrhmenraA#photos/114197249914471021468/albums/5845982797151575009/5845982803176407170?authkey=CKfNzLrhmenraA') 
// true 

我也感動了-到底在第三字符集,因爲它應該是在設定的開始或結束時,如果不指定範圍。

聲明:我不建議這是驗證網址的好方法,它只是現在適用於此特定情況的原始正則表達式的已編輯版本。

相關問題