Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 查询字符串退化情况_Regex_Http_Url_Query String_Querystringparameter - Fatal编程技术网

Regex 查询字符串退化情况

Regex 查询字符串退化情况,regex,http,url,query-string,querystringparameter,Regex,Http,Url,Query String,Querystringparameter,我正在寻找一个正确的正则表达式来验证URI查询字符串。我找到了一些答案,但我仍然对边缘情况有疑问,在这些情况下,键或值可能为空。例如,是否应将以下内容视为有效的查询字符串 ?&& ?= ?a= ?a=& ?=a ?&=a 我正在为[valid]URI查询字符串寻找[…]正确的正则表达式 当然,没问题。根据,这是: ^([^#]*)$ 如果您想要更详细的内容,除了百分比编码实体外,还可以检查允许的字符。正则表达式看起来像这样: ^(%[[:xdigit:]]{2

我正在寻找一个正确的正则表达式来验证URI查询字符串。我找到了一些答案,但我仍然对边缘情况有疑问,在这些情况下,键或值可能为空。例如,是否应将以下内容视为有效的查询字符串

?&&
?=
?a=
?a=&
?=a
?&=a
我正在为[valid]URI查询字符串寻找[…]正确的正则表达式

当然,没问题。根据,这是:

^([^#]*)$
如果您想要更详细的内容,除了百分比编码实体外,还可以检查允许的字符。正则表达式看起来像这样:

^(%[[:xdigit:]]{2}|[[:print:]])*$
就RFC3986而言,到目前为止你所有的例子都是有效的。RFC告诉我们必须如何对查询字符串进行编码,而很少说明查询字符串必须如何构造。较旧的RFC在CGI和HTTP之间不断地转换查询字符串结构的权限,而从未正式指定语法(例如,,…)

以下是一个有趣的注释:

应用程序不得直接指定查询的语法,因为这可能会给不支持特定查询形式的部署带来操作困难。 […] 约束表单提交中使用的查询字符串的语法。新的表单语言不应该模仿它,而是允许创建更广泛的URI

要对此类查询字符串进行完整的有效性检查,您必须实现W3C推荐的。可以在正则表达式中完成,但出于理智的考虑,我建议不要这样做


关于你的例子:我相信它们都是正确的。如何解释它们应该留给接收应用程序。有些并不像你想象的那么边缘化:
?&&
只是一本空字典,而
?=a
可以映射到
{\:“a”}

有前途的未来标准…@FranklinYu我看到了这一点。然而,值得一提的是,这是一个“生活水平”,并不寻求取代RFC 3986。如果有的话,它是在扩大它。