Regex 查询字符串退化情况
我正在寻找一个正确的正则表达式来验证URI查询字符串。我找到了一些答案,但我仍然对边缘情况有疑问,在这些情况下,键或值可能为空。例如,是否应将以下内容视为有效的查询字符串Regex 查询字符串退化情况,regex,http,url,query-string,querystringparameter,Regex,Http,Url,Query String,Querystringparameter,我正在寻找一个正确的正则表达式来验证URI查询字符串。我找到了一些答案,但我仍然对边缘情况有疑问,在这些情况下,键或值可能为空。例如,是否应将以下内容视为有效的查询字符串 ?&& ?= ?a= ?a=& ?=a ?&=a 我正在为[valid]URI查询字符串寻找[…]正确的正则表达式 当然,没问题。根据,这是: ^([^#]*)$ 如果您想要更详细的内容,除了百分比编码实体外,还可以检查允许的字符。正则表达式看起来像这样: ^(%[[:xdigit:]]{2
?&&
?=
?a=
?a=&
?=a
?&=a
我正在为[valid]URI查询字符串寻找[…]正确的正则表达式
当然,没问题。根据,这是:
^([^#]*)$
如果您想要更详细的内容,除了百分比编码实体外,还可以检查允许的字符。正则表达式看起来像这样:
^(%[[:xdigit:]]{2}|[[:print:]])*$
就RFC3986而言,到目前为止你所有的例子都是有效的。RFC告诉我们必须如何对查询字符串进行编码,而很少说明查询字符串必须如何构造。较旧的RFC在CGI和HTTP之间不断地转换查询字符串结构的权限,而从未正式指定语法(例如,,…)
以下是一个有趣的注释:
应用程序不得直接指定查询的语法,因为这可能会给不支持特定查询形式的部署带来操作困难。
[…]
约束表单提交中使用的查询字符串的语法。新的表单语言不应该模仿它,而是允许创建更广泛的URI
要对此类查询字符串进行完整的有效性检查,您必须实现W3C推荐的。可以在正则表达式中完成,但出于理智的考虑,我建议不要这样做
关于你的例子:我相信它们都是正确的。如何解释它们应该留给接收应用程序。有些并不像你想象的那么边缘化:
?&&
只是一本空字典,而?=a
可以映射到{\:“a”}
有前途的未来标准…@FranklinYu我看到了这一点。然而,值得一提的是,这是一个“生活水平”,并不寻求取代RFC 3986。如果有的话,它是在扩大它。