2014-09-24 94 views
0

任何人都可以建議如何檢測一個字符串是否「看起來像」查詢字符串?舉例來說,如果我有一個查詢字符串是這樣的:檢測一個字符串是否看起來像查詢字符串

field1=value1&field2=&field3=value4 

它會返回true

以下是我在想的應該爲我所需要的技巧做些什麼,但我也對任何其他建議以及下面的內容非常粗略。也許甚至有一個函數在解析無效查詢字符串時返回false

function looks_like_querystring(source) { 
    return /=.*?&/g.test(source); 
} 

function looks_like_querystring(source) { 
    return source.indexOf('&') != -1 && source.indexOf('=') != -1; 
} 
+0

爲了以防萬一,當我使用有效的'field1 = value1'查詢字符串測試它時,您的兩個方法都返回'false'。你有更多的規範,查詢字符串必須始終具有'&'?也許閱讀[相應的維基百科文章](http://en.wikipedia.org/wiki/Query_string)可能有助於更多地瞭解有效查詢字符串的規則。 – 2014-09-24 01:53:21

+0

好問題,但在我的情況下,總會有很多參數。永遠不會包含「?」並可能會或可能不會以「&」開頭..我知道有沒有真正的火災方式來做到這一點,我只是想得到一個體面的檢查..也許可以補充說,它不能以「<,{, [」。 – Rick 2014-09-24 02:03:03

+0

把這些信息提供給問題主體,也許如果可能的話,更多的測試用例來澄清問題。 – 2014-09-24 02:07:57

回答

0
String.prototype.isInvalidCharacter=function(){ 
    validCharacters="1234567890qwertyuiopasdfghjklzxcvbnm&=" 
    for(var i in validCharacters){ 
     if (validCharacters[i]===this.valueOf()) return false; 
    } 
    return true; 
} 

String.prototype.isQueryString=function(){ 
    for(var i=0;i<this.length;i++){ 
     if (this[i].isInvalidCharacter()){return false;} 
    } 
    var prevChar="&"; 
    var counter=0; 
    for(var i=0;i<this.length;i++){ 
     if (this[i]==="="){ 
      if(prevChar==="=") return false; 
      prevChar="=";counter++; 
     } 
     if (this[i]==="&"){ 
      if(prevChar==="&") return false; 
      prevChar="&";counter++; 
     } 
    } 
    if (counter===0) return false; 
    return true; 
} 
0

感謝所有..有一點綁起來昨天,但最終只是用正則表達式會根據關的我發現我在這裏貼過這個問題後: Validate URL query string with regex

這裏是我結束了使用完全適用於我的目的:

function looks_like_querystring(source) { 
    return /^\???[^<[{]([^=&?]+(=[^=&?]*)?(&[^=&?]+(=[^=&?]*)?)*)?$/.test(source); 
} 
相關問題