2012-07-13 98 views
0

我想驗證一個沒有域的url,只是路徑和參數。驗證url的路徑

,我使用做的大部分工作的正則表達式,但它有一些錯誤,我不知道如何阻止(我用正則表達式很小白):

/^(\/([\w#!:.?+=&%@!\-\/])+)$/i 

下一個例子正確驗證

/asd.jsp -> true 
/asd/asd.jsp -> true 
/asd/asd.jsp?bar=baz&inga=42&quux -> true 
/asd/asd.jsp?bar=ba z&inga=42&quux -> false 

但這者的arent正確ulrs和他們給了我真實太:

/asd/asd./jsp -> true :(
/asd/asd.jsp/ -> true :(
/asd./asd.jsp -> true :(
/asd///asd.jsp -> true :(
/asd/asd.jsp&bar=baz?inga=42?quux -> true :(

你是否建議使用函數而不是正則表達式?

非常感謝!

+0

看看[本問題](http://stackoverflow.com /問題/ 161738 /什麼,是最最好的正則表達式來檢查,如果-A-字符串是-A - 有效的URL)。只要刪除域的正則表達式(搜索第三點)。 – 2012-07-13 12:08:36

+1

'/ asd/asd.jsp /'是一個有效的網址 – 2012-07-13 12:09:53

回答

0

試試這個:

^(\\/\\w+)+\\.\\w+(\\?(\\w+=[\\w\\d]+(&\\w+=[\\w\\d]+)+)+)*$ 

我已經逃脫了特殊字符,這樣你就可以直接在Java中使用它。 順便說一句,/asd/asd.jsp?bar=baz & inga = 42 & quux不是一個有效的URL。

轉義的正則表達式:

^(\/\w+)+\.\w+(\?(\w+=[\w\d]+(&\w+=[\w\d]+)+)+)*$ 
+0

我已經改變了你的解決方案,允許值「/asd/asd.jsp」和只有一個參數「?」: '^(\ \ w +)+ \。\ w +(\?(\ w + = [\ w \ d] +(&w + = [\ w \ d] +)*)+){0,1} $' 作爲最後一個請求,也可以允許值「/ asd /」和「/ asd」? 非常感謝您的解決方案,真的很棒! – Masta 2012-07-13 15:25:17

0
^(\/\w+)+(\.)?\w+(\?(\w+=[\w\d]+(&\w+=[\w\d]+)*)+){0,1}$ 

有效的:

/test 
/test/test 
/test.jsp 
/test.jsp?v=1 
/test.jsp?v=1&v=2 
/test/test.jsp?v=1&v=2 

無效:

/test/test./jsp 
/test/test.jsp/ 
/test./test.jsp 
/test///test.jsp