如何在WireMock的bodyPatterns中用正则匹配1-12的exp_month?
WireMock中匹配1-12月份的正则修正方案
你的问题出在正则表达式的逻辑分组上,原配置里card\\[exp_month\\]=[1-9]|1[0-2]的写法错误——正则中|(或操作)的优先级极低,会把整个匹配字符串拆成两个独立分支:
- 分支1:仅匹配到
card[exp_month]=[1-9],忽略后面的&card[exp_year]=...部分,无法匹配完整请求体 - 分支2:仅匹配
1[0-2]&card[exp_year]=2[0-9][2-9][3-9],忽略前面的请求体前缀,同样不匹配
正确的做法是把1-12的匹配规则用**非捕获括号(?:...)**包裹,确保|只作用于月份数字的匹配逻辑,修正后的正则片段为:
card\\[exp_month\\]=(?:[1-9]|1[0-2])
完整的WireMock请求配置如下:
"request": { "url": "/stripe/v1/payment_methods", "method": "POST", "bodyPatterns": [ { "matches": "type=card&card\\[cvc\\]=[0-9]{3}&card\\[number\\]=[1-9][0-9]{15}&card\\[exp_month\\]=(?:[1-9]|1[0-2])&card\\[exp_year\\]=2[0-9][2-9][3-9]", "caseInsensitive": false } ] }
该正则可正确匹配:
- 1-9的单月份数字(如
1、9) - 10-12的双月份数字(如
10、12)
内容的提问来源于stack exchange,提问作者tuk
相关产品推荐
相关产品推荐

