2012-01-31 138 views
0

我正在使用MVC Razor。我面臨一個問題來驗證URL驗證。URL驗證問題MVC剃刀和JQuery

我需要在插入臨時數據庫之前進行URL驗證。

我的http://www.regxlib.com/Search.aspx?k=&c=2&m=-1&ps=20

參考,並找到了一個很好的驗證模式,

(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])? 

雖然我在MVC視圖中工作,它給我的錯誤,所以我必須將其更改爲

(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@@?^=%&:/~\+#]*[\w\-\@@?^=%&/~\+#])? 

ie

@@而不是@

當它運行,如果我看到控制檯,我得到了原來的一個,所以我認爲這是好的,我做的 @@代替@

但在控制檯我得到一個錯誤

enter image description here

誰能告訴我什麼是錯,所以得到了錯誤,

「無效的範圍字符類」來解決這個

+0

不是這樣的答案,但這兩個」&「實際上不應該是」&「,而只是」&「 - 它們經常被HTML編碼一次您從中獲得正則表達式的網站。 – JimmiTh 2012-01-31 09:48:08

回答

2

最簡單的方法:在JavaScript驗證,刪除new RegExp()以及引號,並且在開頭和結尾添加斜槓,表示正則表達式文字。因爲你的正則表達式是在一個字符串中,「\」被解釋爲一個字符串轉義,而不是正則表達式轉義,本質上意味着所有的「\」將被刪除。您避免不使用的字符串,而是一個javascript正則表達式文字:

var urlregex = /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/; 

如果創建一個使用正則表達式的表達式(),你必須在每一個地方\時使用\\

正如在評論中提到的,將兩個&替換爲&(在您獲得正則表達式的服務器上的雙HTML編碼)。它們在正則表達式語法中沒有錯,但它們確實允許表達式允許;,這在URL中是不允許的。

更新/解釋

錯誤的實際含義是,因爲JavaScript創建最終的正則表達式時,忽略了字符串中的所有反斜槓,它會變成:

/(http|ftp|https)://[w-_]+(.[w-_]+)+([w-.,@?^=%&:/~+#]*[[email protected]?^=%&/~+#])?/ 
  • 的原文[\w\-_]表示「匹配任何單詞(字母數字)字符,連字符或下劃線」。
  • [w-_]表示「匹配」w「和」_「之間的任何字符。

但 「W」 其實出自 「_」(看一個ASCII/UTF-8字符表),這意味着它在字符類( 「字符類」=「的無效範圍收集的字符匹配「)

+0

回答很好的解釋,非常感謝 – 2012-01-31 10:17:18