Regex 如何使用正则表达式验证内容类型?
我需要使用正则表达式(python)验证请求接受头。正则表达式必须匹配application/json或application/jose+jwe和其他参数(charset=utf8和q值) 最初要求只接受application/json和q值,而不接受其他mimi类型。我用了下面的正则表达式Regex 如何使用正则表达式验证内容类型?,regex,Regex,我需要使用正则表达式(python)验证请求接受头。正则表达式必须匹配application/json或application/jose+jwe和其他参数(charset=utf8和q值) 最初要求只接受application/json和q值,而不接受其他mimi类型。我用了下面的正则表达式 (^application/json;q=(0 | 1 |(0\[1-9]))|(^application/json$) 我知道需要能够将字符集参数包含到charset=utf8中,并且能够匹配行中的任何位
(^application/json;q=(0 | 1 |(0\[1-9]))|(^application/json$)
我知道需要能够将字符集参数包含到charset=utf8
中,并且能够匹配行中的任何位置
我是regex新手,创建了以下regex,但它不符合所有要求()-
(application/json;q=(0\[1-9]))$(application\/json;charset=utf8)|(application\/json;charset=utf8 q=(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的部分匹配;字符集=utf8 q=0.2
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
唯一可接受的字符集值是charset=utf8
谢谢试试这个正则表达式。它与可选的“q”和可选的“charset”一起工作
这里有一个更具体的模式
^application\/(json|jose\+jwe)(;(( q=(1|0\.\d))|( charset.utf8))+)?$
这将符合您上面描述的内容。在第一个测试用例中,后面有一个逗号,但我不确定是否要包含它。不过这是一个简单的添加
^application\/(json|jose\+jwe)(;(( q=(1|0\.\d))|( charset.utf8))+)?,?$
这比我的正则表达式好多了。我应该说得更清楚些只允许
charset=utf8
。您的正则表达式接受字符集之后的任何内容。-它与我不需要的application/pdf
匹配。我相信这是因为q?-q值只能是整数。我在某个地方读到它只有1个小数点。好的,我改变了一些事情,再看看正则表达式和链接。对不起,我的解释不清楚和准确。我已经更新了问题。q值必须介于0-1(小数点后1位)之间,并且唯一可接受的字符集值是charset=utf8
。此外,如果包含参数,则它们必须有效。如果您查看更新请求()中的底线,application/jose+jwe;行话
应该是失败的请求。这是我感到困惑的地方,我已经建立了另一个可选步骤,应该可以工作。这很好,离我一直试图实现的目标更近了。我确实需要后面的逗号,因为它可能会在提交其他MIME类型时使用-^application\/(json | jose\+jwe)(;((q=(1 | 0\.\d))|(charset.utf8))+)?,?$
。唯一的问题是,当MIME类型不是以application/json开头时(在两个MIME类型之间或结尾),它与MIME类型不匹配。例如,text/html、application/json失败;q=0.2,application/pdf
和text/html,application/json;q=0.2,
Update-这允许在application\/(json | jose\+jwe)(;((q=(1 | 0\.\d))|(charset.utf8))+),?
行中的任何地方进行匹配,但是它知道匹配application/jsonjargon
,这应该是失败的匹配…它匹配行中的任何地方,尽管-application\/(json | jose\+jwe)(;(q=(1 | 0.\d))(charset=utf8))+)?,?
虽然它现在正在匹配,但如果在匹配后包含其他字符,即application/json,它将不正确地匹配;字符集=utf8 q=0.1行话。
^application\/(json|jose\+jwe)(;(( q=(1|0\.\d))|( charset.utf8))+)?,?$