我目前正在使用可以插入网页的存根服务器,因此每次测试付款屏幕时都不需要点击 sagepay。我需要服务器接收来自网页的请求,并使用 URL 中包含的动态参数来构建服务器响应。存根使用正则表达式目标来挑选我需要的参数并将它们添加到响应中。
我正在使用这个存根服务器
我使用此处包含的正则表达式测试器逐个构建接受的 URL来测试每一位逻辑。这些表达式单独工作,但是当我尝试将其中的两个或多个组合在一起时,它们拒绝工作。每个参数都由一个与号 (&) 和参数名称分隔。
以下是参数示例:
paymentType=A&amount=147.06&policyUid=07ef493b-0000-0000-6a05-9fa4d6a5b5ad&paymentMethod=A&script=Retail/accept.py&scriptParams=uid=07ef461a-0000-0000-6a059fa44a8870bf&invokePCL=true&paymentType=A&description=New Business Payment&firstName=Adam&surname=Har&addressLine1=20 Potters Road&city =伦敦&postalCode=EC1 4JS&payerUid=07ef3ff7-0000-0000-6a05-9fa42e92d56b&cardType=valid&continuousAuthority=true&makeCurrent=true
并在一个易于阅读的列表中(不带 &'s)
paymentType=A
amount=147.06
policyUid=07ef493b-0000-0000-6a05-9fa4d6a5b5ad
paymentMethod=A
script=Retail/accept.py
scriptParams=uid=07ef461a-0000-0000-6a059fa44a8870bf&invokePCL=true&paymentType=A
description=New Business Payment
firstName=Adam
surname=Har
addressLine1=20 Chase road
city=London
postalCode=EC1 3PF
payerUid=07ef3ff7-0000-0000-6a05-9fa42e92d56b
cardType=valid
continuousAuthority=true
makeCurrent=true
这是我接受的带有正则表达式逻辑的 URL 参数:
paymentType=A&amount=([0-9]+.[0-9]{2})&policyUid=([A-Za-z0-9]+(?:[\s-][A-Za-z0-9 ]+) $)&paymentMethod=([a-zA-Z]+)&script=([a-zA-Z]+/[a-zA-Z]+.py)&scriptParams=[a-zA-Z]{ 3}=(([A-Za-z0-9]+(?:[\s-][A-Za-z0-9]+)))&description=([a-zA-Z0-9]+s )&firstName=[A-Za-z]&surname=[A-Za-z]&addressLine1=[a-zA-Z0-9 ]+&city=([a-zA-Z ]+)&postalCode=[a-zA- Z0-9 ]+&payerUid=([A-Za-z0-9]+(?:[\s-][A-Za-z0-9]+) $)&cardType=[a-zA-Z]+&continuousAuthority =[a-zA-Z]+&makeCurrent=[a-zA-Z]+
再次在列表中:
registerPayment?outputType=xml
country=GB
paymentType=A
amount=([0-9]+.[0-9]{2})
policyUid=([A-Za-z0-9]+(?:[\s-][A-Za-z0-9]+)*$)
paymentMethod=([a-zA-Z]+)
script=([a-zA-Z]+/[a-zA-Z]+.py)
scriptParams=[a-zA-Z]{3}=(([A-Za-z0-9]+(?:[\s-][A-Za-z0-9]+)))
description=([a-zA-Z0-9 ]+s)
firstName=[A-Za-z]
surname=[A-Za-z]
addressLine1=[a-zA-Z0-9 ]+
city=([a-zA-Z ]+)
postalCode=[a-zA-Z0-9 ]+
payerUid=([A-Za-z0-9]+(?:[\s-][A-Za-z0-9]+)*$)
cardType=[a-zA-Z]+
continuousAuthority=[a-zA-Z]+
makeCurrent=[a-zA-Z]+
我的问题是;为什么我的正则表达式和样本单独匹配,但是当我把它们放在一起时却没有?
附加问题:
我对整个 ScriptParams 参数使用逻辑 (([A-Za-z0-9]+(?:[\s-][A-Za-z0-9]+))) (这里的 & 是参数。)如果我只想获取“uid”部分并留下其余部分,我需要什么表达式来定位它(它由 Az az 0-9 和破折号组成)?
谢谢你
更新
我稍微调整了您的答案,因为我使用的存根服务器(?:[\s-])
在加载包含 URL 模板的文件时不会接受。我还合并了很多 % 和 0-9 因为请求在匹配之前是 UTF 编码的(这是我没有预料到的),并且一些参数有我无法控制的流氓空间。除此之外,您的解决方案效果很好:)
这是我的新版本 scriptParams 正则表达式:
&scriptParams=[a-zA-Z]{3}%3d[-A-Za-z0-9]+
这接受整个参数,并在正则表达式测试器中正常工作。现在,当我在这部分之后链接任何内容时,匹配不成功。
我不明白为什么这是一个问题,因为正则表达式似乎很好地串在一起。任何想法表示赞赏。
这是完整的正则表达式:
paymentType=[-%a-zA-Z0-9 ]+&amount=[0-9]+.[0-9]{2}&policyUid=([-A-Za-z0-9]+)&paymentMethod=([%a-zA-Z0-9]+)&script=[%/.a-zA-Z0-9]+&scriptParams=[a-zA-Z]{3}%3d[-A-Za-z0-9]+&description=[%a-zA-Z0-9 ]+&firstName=[-%A-Za-z0-9]+&surname=[-%A-Za-z0-9]+&addressLine1=[-%a-zA-Z0-9 ]+&city=[-%a-zA-Z 0-9]+&postalCode=[-%a-zA-Z 0-9]+&payerUid=([-A-Za-z0-9]+)&cardType=[%A-Za-z0-9]+&continuousAuthority=[A-Za-z]+&makeCurrent=[A-Za-z]+
这是完整的 URL 参数集(存在 UTF 编码):
paymentType=A&amount=104.85&policyUid=16a9cc22-0000-0000-5a96-5654d9a31f92&paymentMethod=A%20&script=RetailQuotes%2FacceptQuote.py%20&scriptParams=uid%3d16a9c958-0000-0000-5a96-565435311d07%26invokePCL%3dtrue%26paymentType%3dA%20&description=New%2520Business%2520Payment&firstName=Adam&surname=Har%20&addressLine1=26%2520Close&city=Potters%2520Town&postalCode=EC1%25206LR%20&payerUid=16a9c24e-0000-0000-5a96-5654b3f956e0&cardType=valid%20&continuousAuthority=true&makeCurrent=true
谢谢
PS(解决了服务器问题。我在使用 URL 参数时犯了一个小错误。)