正则表达式匹配符合指定参数规则的URL编写求助
正则调整方案
首先修复原有正则的两个核心问题:
- 未对URL中的特殊字符
?、.做转义,正则中这两个字符属于特殊功能字符,直接书写会导致匹配逻辑不符合预期 - 缺少对可选后续参数的匹配规则
调整后正则
仅校验路径前缀场景(兼容原有写法)
^.*/truma\.aspx\?lang=en(&project=(31|32|33))?(&.*)?$
严格校验完整域名场景
^https://www\.example\.com/truma\.aspx\?lang=en(&project=(31|32|33))?(&.*)?$
规则说明
\.、\?:对URL中的特殊字符做转义,保证完全匹配对应字符(&project=(31|32|33))?:可选的project参数分组,仅允许取值31/32/33,末尾?标识整个参数可选(&.*)?:可选的后续参数分组,强制要求以&开头,后面可跟任意参数内容,末尾?标识整个部分可选$:匹配字符串结尾,避免URL末尾出现多余非法内容
匹配效果示例
合法匹配场景:
https://www.example.com/truma.aspx?lang=enhttps://www.example.com/truma.aspx?lang=en&project=31https://www.example.com/truma.aspx?lang=en&project=32&utm_source=google&utm_medium=cpchttps://www.example.com/truma.aspx?lang=en&utm_campaign=test&other_param=123非法不匹配场景:
https://www.example.com/truma.aspx?lang=en&project=34:project参数取值非法https://www.example.com/truma.aspx?lang=cn:必填前缀的lang参数错误https://www.example.com/truma.aspx?lang=enproject=31:缺少参数分隔符&
内容的提问来源于stack exchange,提问作者Itay
相关产品推荐
相关产品推荐

