2014-09-24 3 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

На всякий случай, оба метода возвращают 'false', когда я тестировал его с помощью строки запроса' field1 = value1'. У вас есть дополнительная спецификация, что строка запроса всегда должна иметь «&»? Возможно, чтение [соответствующей статьи Википедии] (http://en.wikipedia.org/wiki/Query_string) может помочь лучше понять правило для правильной строки запроса. –

+0

Хороший вопрос, но в моем случае всегда будет много параметров. Никогда не будет содержать?? и может или не может начинаться с «&». Я знаю, что на самом деле нет надежного огневого способа сделать это, я просто пытаюсь получить приличный чек. Может быть, можно добавить, что он не может начинаться с «<, {, [». – Rick

+0

Поместите эту информацию в тело вопроса и, возможно, если возможно, проверите больше тестовых примеров, чтобы прояснить проблему. –

ответ

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

Спасибо всем .. Got немного связали вчера, но в конечном итоге просто идти с регулярным выражением на основе от того, что я нашел здесь после того, как я отправил этот вопрос: Validate URL query string with regex

Вот что я в конечном итоге использовала, что отлично работает для моей цели:

function looks_like_querystring(source) { 
    return /^\???[^<[{]([^=&?]+(=[^=&?]*)?(&[^=&?]+(=[^=&?]*)?)*)?$/.test(source); 
} 
Смежные вопросы