【问题标题】:Regex to ensure valid querystring正则表达式以确保有效的查询字符串
【发布时间】:2014-11-14 06:16:37
【问题描述】:

我正在尝试提出一个可以与 Javascript .test 一起使用的正则表达式,以确保我的系统只接受有效格式的查询字符串。

格式看起来像这样i=1&s1=122&s2=238&s3=167&s4=756&s5=13 它可以有无限数量的s#= 参数,所以可以比这个例子更长或更短。

在英文中,格式类似于i=1&s[1+0]=[any number > 0]&s[1+1]=[any number > 0]&s[1+2]=[any number > 0] 等等。

现在我拥有的正则表达式是/^([\w-]+(=[\w-]*)?(&[\w-]+(=[\w-]*)?)*)?$/ 它基于this answer. 中提供的代码它在拒绝某些类型的无效字符串方面做得很好,但仍然有很多漏洞。

如何改进这个正则表达式,使其更准确地拒绝无效数据?

【问题讨论】:

  • s[1+2] regex 将如何执行算术运算...它将如何检测数字的线性增加?
  • 如果不能,那也没关系。系统对键值对中的键不是特别挑剔。我只是指出格式以防万一。

标签: javascript regex query-string


【解决方案1】:

如果我正确理解了这个问题,您可以通过以下方式收紧:

/^i=1(&s\d+=\d+)+$/

它将允许s14 出现在s2 之前,但无论如何查询参数都应该是无序的。

【讨论】:

  • 我认为这是最好的,因为它正确地维护了字符串以i=1 开头。我做了一个更改,因为我不需要捕获组。使用的最终正则表达式:^i=1(?:&s\d+=\d+)+$
【解决方案2】:

像这样的正则表达式怎么样

^i=\d+(?:&s\d+=\d+)+$

例如http://regex101.com/r/rP8vU5/2

【讨论】:

    【解决方案3】:
    ^i=\d+(?:&s\d+=\d+(?=&|$))+$
    

    试试这个。查看演示。

    http://regex101.com/r/pQ9bV3/14

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多