0

私は現在、ウェブページにプラグインできるスタブ サーバーで作業しているので、支払い画面をテストするたびに sagepay を押す必要はありません。Web ページから要求を受信し、URL に含まれる動的パラメーターを使用してサーバー応答を作成するには、サーバーが必要です。スタブは正規表現ターゲットを使用して、必要なパラメーターを選択し、それらを応答に追加します。

このスタブサーバーを使用しています

ここに含まれる正規表現テスターを使用して各ロジックをテストし、受け入れられる URL を 1 つずつ作成しました。式は別々に機能しますが、2 つ以上を結合しようとすると、機能しなくなります。各パラメーターは、アンパサンド (&) とパラメーターの名前で区切られます。

パラメータのサンプルを次に示します。

PaymentType = a&anime = 147.06&PolicyUID = 07EF493B-0000-0000-6A05-9FA4D6A5B5AD&PAYANTMETHOD = A&SCRIPT = A&Script = retail/Accept.py.py.py.phe&Scrippparams =London&postalCode=EC1 4JS&payerUid=07ef3ff7-0000-0000-6a05-9fa42e92d56b&cardType=valid&continuousAuthority=true&makeCurrent=true

読みやすくするためのリスト (& なし)

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 テンプレートを含むファイルをロードするときに を受け入れないため、回答を少し調整しました。また、リクエストが一致する前に UTF エンコードされているため (これは予想していませんでした)、多くの % と 0-9 を組み込んでおり、一部のパラメーターには制御できない不正なスペースが含まれています。それ以外は、あなたのソリューションはうまくいきました:)

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 パラメーターの使用法を少し間違えました。)

4

1 に答える 1

0

まず、あなたの正規表現はすべて機能するとは限りません.一部は量指定子が欠落しており、他のものは$何らかの理由で. 本来あるべき姿は次のとおりです。

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]+)+))
invokePCL=([a-z]+)
paymentType=A
description=([a-zA-Z0-9 ]+)
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]+

組み合わせると、次のようになります。

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]+)+))&invokePCL=([a-z]+)&paymentType=A&description=([a-zA-Z0-9 ]+)&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]+

正規表現101のデモ

[注、一致する正規表現を取得し、最小限の編集を実行しました]。

2 番目の質問については、パラメーターの一部である Uid 部分の意味がわかりません&。URL に同様の形式 (policy、scriptparams、user) の 3 つの Uid がある場合、scriptparams の Uid の特定のパターンがわかっている場合を除き、それらを式に入れる必要があります。

uid以下の式では、scriptparams のみが小文字であるという事実を利用しました。

uid=[0-9a-f]+(?:-[0-9a-f]+)+

正規表現101のデモ

于 2013-09-12T19:19:10.090 に答える