我需要使用正则表达式(python)验证请求Accept标头。正则表达式必须匹配application / json或application / jose + jwe和其他参数(charset = utf8和q值)。
最初只接受application / json和q值,没有其他mimi类型的要求。我有以下有效的正则表达式。
(^application/json;q=(0|1|(0\.[1-9]))$)|(^application/json$)
我知道需要将字符集参数包含到charset=utf8
中,并能够匹配行中的任何地方。
我是regex的新手,并创建了以下regex,但它不符合所有要求(https://regex101.com/r/vFMCcI/11)-
(application/json; q=(0|1|(0\.[1-9])))$|(application\/json; charset=utf8)|(application\/json; charset=utf8 q=(0|1|(0\.[1-9])))|(application/json)
测试字符串是
application/json,
application/json; q=0.2
application/json; charset=utf8
application/json; q=0.2 charset=utf8
application/json; charset=utf8 q=0.2
text/html, application/json; q=0.2, application/pdf
application/jose+jwe
application/jose+jwe; q=0.2
application/jose+jwe; charset=utf8
application/jose+jwe; q=0.2 charset=utf8
application/jose+jwe; charset=utf8 q=0.2
text/html, application/jose+jwe; q=0.2, application/pdf
application/json; charset=utf8 q=0.2
的部分匹配?编辑:
Q值必须为0-1,并且只能保留到小数点后一位
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
唯一可接受的字符集值为charset=utf8
谢谢
答案 0 :(得分:2)
这是更具体的模式。
^application\/(json|jose\+jwe)(;(( q=(1|0\.\d))|( charset.utf8))+)?$
这将与您上面描述的相符。在第一个测试用例中,有一个逗号结尾,但是我不确定您是否要包括它。不过,这是一个简单的添加。
^application\/(json|jose\+jwe)(;(( q=(1|0\.\d))|( charset.utf8))+)?,?$
答案 1 :(得分:1)
尝试此正则表达式。它与可选的“ q”和可选的“字符集”一起使用
application\/(json|jose\+jwe)(;\s)?((charset=utf8|q=[0-1]\.\d)(\s)?)*