Javascript 检测字符串是否看起来像查询字符串

Javascript 检测字符串是否看起来像查询字符串,javascript,Javascript,对于如何简单地检测一个字符串是否“看起来”像一个查询字符串,有谁能给出一些建议吗?例如,如果我有这样一个查询字符串: field1=value1&field2=&field3=value4 它将返回true 以下是我认为应该为我的需要做的事情,但我也愿意接受任何其他建议,下面的内容非常粗略。也许在解析无效的查询字符串时,甚至有一个函数返回false function looks_like_querystring(source) { return /=.*?&/g

对于如何简单地检测一个字符串是否“看起来”像一个查询字符串,有谁能给出一些建议吗?例如,如果我有这样一个查询字符串:

field1=value1&field2=&field3=value4
它将返回
true

以下是我认为应该为我的需要做的事情,但我也愿意接受任何其他建议,下面的内容非常粗略。也许在解析无效的查询字符串时,甚至有一个函数返回
false

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

String.prototype.isInvalidCharacter=function(){
validCharacters=“1234567890QWERTYUIOPASDFHJKLZXCVBNM&=”
for(validCharacters中的变量i){
if(validCharacters[i]==this.valueOf())返回false;
}
返回true;
}
String.prototype.isQueryString=function(){

for(var i=0;i谢谢大家..昨天有点忙,但最终还是使用了一个正则表达式,这是我在发布以下问题后在这里发现的:

以下是我最终使用的,非常适合我的目的:

function looks_like_querystring(source) {
    return /^\???[^<[{]([^=&?]+(=[^=&?]*)?(&[^=&?]+(=[^=&?]*)?)*)?$/.test(source);
}
函数看起来像查询字符串(源代码){

返回/^\???[^以防万一,当我使用有效的
field1=value1
查询字符串测试它时,您的两个方法都返回
false
。您是否有更多的规范要求查询字符串必须始终具有“&”?也许阅读可以帮助了解有效查询字符串的规则。这是一个好问题,但在我的情况下,总是会有很多参数。将永远不会包含“?”,可能会也可能不会以“&”开头。我知道确实没有可靠的方法来实现这一点,我只是想得到一个像样的检查。也许可以补充一点,它不能以“将信息放入问题体,如果可能的话,更多的测试用例来澄清问题”。
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;
}
function looks_like_querystring(source) {
    return /^\???[^<[{]([^=&?]+(=[^=&?]*)?(&[^=&?]+(=[^=&?]*)?)*)?$/.test(source);
}