2017-03-15 18 views
1

是否有和容易的方式獲得使用JAVA的URL查詢字符串的語法驗證。我發現了類似的問題,但沒有一個很好的答案。有沒有簡單的方法獲得使用JAVA的URL查詢字符串的語法驗證

+0

你知道你需要驗證什麼類型的URL嗎? –

+0

嗨,只有查詢字符串,例如,當你有:www.something.com?a=b&c=d,查詢字符串只是a = b&c = d,所以,只是想知道一種方式,我在哪裏可以是正確的,它是正確形成的:它不以&或?開頭,它們具有名稱=值對,並且由&分隔。我找到了一些正則表達式,但都沒有滿足所有這些要求。 –

+0

根據規範,查詢字符串以'&'和偶數'?'開頭是有效的。查詢字符串不限於包含由「=」分隔的鍵/值對。看起來你對查詢字符串應該是什麼樣子有自己的定義,所以如果你想有一個適合你的需求的答案,你將不得不在你的問題中指定這個定義。 –

回答

0

您可以使用java.net.URL創建一個URL。如果URL不正確,則會拋出MalformedURLException

try{ 
    URL url=new URL("www.something.com?a=b&c=d"); 
} 
catch(MalformedURLException e){ 
    System.out.println("Sorry! This is Incorrect URL!!!"); 
} 

參見documentation

URL

public URL(String spec) throws MalformedURLException 

創建從字符串表示一個URL對象。這個構造函數 等同於對第一個參數爲null的雙參數構造函數的調用。

參數
spec - 要解析爲URL的字符串。

拋出
MalformedURLException - 如果未指定協議,或未知 協議被發現,或規格爲空。

0

如果使用UrlValidator會怎麼樣?

//instantiate a UrlValidator and then just return the url validation 
UrlValidator urlValidator = new UrlValidator(); 
urlValidator.isValid("http://www.google.com?param1=value1&param2=value2"); 
0

按照URI specification

query   = *(pchar/"/"/"?") 
pchar   = unreserved/pct-encoded/sub-delims/":"/"@" 
unreserved = ALPHA/DIGIT/"-"/"."/"_"/"~" 
pct-encoded = "%" HEXDIG HEXDIG 
sub-delims = "!"/"$"/"&"/"'"/"("/")" 
       /"*"/"+"/","/";"/"=" 

這使我對下面的正則表達式:

/([@:!$&'()*+,;=/?0-9a-z_~.-]|%[0-9a-f]{2})*/i 

或者在Java中:

String query = "name1=value1&name2=value2"; 
Pattern pattern = Pattern.compile("([@:!$&'()*+,;=/?0-9a-z_~.-]|%[0-9a-f]{2})*", 
     Pattern.CASE_INSENSITIVE); 

System.out.println(pattern.matcher(query).matches()); 
相關問題