0

私はjqueryバリデーターを初めて使用し、addMethodを使用してカスタムルールで拡張する方法を理解するのに苦労しています。テキスト フィールドから base64 でエンコードされたコンテンツを取得し、改行をトリミングしてデコードする必要があります。これまでに行ったことは次のとおりですが、フォームの送信を自動的に停止することができないため、トラブルシューティングが非常に困難でした。これら2つの方法が機能しない理由を誰か教えてもらえますか?

$.validator.addMethod("trimLineFeeds", function(value, element) {
    return this.optional(element) || value.replace(/\\r\\n/g, "");
}, "Please check your input.");

$.validator.addMethod("b64Decode", function(value) {
    var e={},i,b=0,c,x,l=0,a,r='',w=String.fromCharCode,L=value.length;
    var A="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    for(i=0;i<64;i++){e[A.charAt(i)]=i;}
    for(x=0;x<L;x++){c=e[value.charAt(x)];b=(b<<6)+c;l+=6;
        while(l>=8){((a=(b>>>(l-=8))&0xff)||(x<(L-2)))&&(r+=w(a));}
    }
    return r;
}, "Please check your input.");

$(document).ready(function() {
        $("#myForm").validate({
        rules: {
            b64Field: {
                regex:      '^[a-zA-Z0-9=\\s]*$',
                maxlength:  8192,
                minlength:  512,
                required:   true,
                trimLineFeeds:  true,
                b64Decode:  true
            }
        }
    });
});
4

1 に答える 1

0

ここでの目標をもう少しうまく説明するために、json_encode()、base64_encode()、chunk_split() である phpseclib のキー情報をいくつか取得し、テキストエリア フォームにコピー/貼り付けしてローカル ストレージのブラウザでプロセス全体を逆にする必要がありました。 . 自分のコードを適切に機能させることができたので、私が達成しようとしていたことの中に、他の誰かを助けることができる情報があることを願っています.

より多くの読み取りといじくり回しで、ここにある Base64/UTF-8 エンコード/デコード ライブラリの助けを借りて、上記で実行しようとしていたことを完全に取得することができました。 https://gist.github.com/Nijikokun/5192472

注: CDN のように GitHub から base64-utf8.module.js を使用すると、すべての場合に機能するとは限らないため、base64-utf8.module.js のローカル コピーをサーバーに保存します。私のブラウザ (Chrome v30.0.1) は、それが text/javascript または application/javascript ではなく text/plain であると不平を言いUncaught ReferenceError: base64 is not defined、実行すると最終的にエラーになります。

更新されたコードの完全なコピーを次に示します。

$.validator.addMethod("trimAndDecode", function(value) {
    value = value.trim();
    value = value.replace(/[\r\n]*/g, "");
    value = base64.decode(value);
    return value;
}, "Please check your input.");

$(document).ready(function() {
        $("#myForm").validate({
        rules: {
            b64Field: {
                regex:      '^[a-zA-Z0-9=\\s]*$',
                maxlength:  8192,
                minlength:  512,
                required:   true,
                trimAndDecode:  true
            }
        }
    });
});

したがって、chunk_split のブロックを送信する場合、base64 でエンコードされたコンテンツは次のようになります。

eyJjbGllbnQiOnsicHVibGljS2V5IjoiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0t
LS1cclxuTUN3d0RRWUpLb1pJaHZjTkFRRUJCUUFER3dBd0dBSVJBSjZmK3cydzRU
TWxFN2dUeEt1K0FLTUNBd0VBQVE9PVxyXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0t
LS0iLCJwcml2YXRlS2V5IjoiLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0t
LVxyXG5NR0VDQVFBQ0VRQ2VuXC9zTnNPRXpKUk80RThTcnZnQ2pBZ01CQUFFQ0VB
V1UxMzZaMUxLNTh4TUw5UFB6cStFQ1xyXG5DUURMeE12b2grVGEyd0lKQU1kSTNw
NDBOWWZaQWdoMUp2VVJBS2hjQndJSWJmckJJUDRmTE1FQ0NFbWxGUjArXHJcbk5j
SWFcclxuLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0iLCJwYXNzUGhyYXNl
IjoiODAxYTY5MTZjMDFhMmMyYzQ0OTYyNGQwMzJlZGE2ODczNDFmNTk0NmUyMWYz
NmI0Y2NiNGMwYWI4YjRhMzg5MWY5NDc4YzllZjYwZDgzZTk5MzE3OTMwNjM0MTg4
OWRlM2IyYTRiMDlhYzVjMGY2YzMwNzRkZWVlYmM0N2FlMTZjM2ZhODFiOWYwNzk3
ODE2ZWQwNTkwZDU5NWM2N2MxYzllMmFkZTdjNWQ2ODBhZDIzYmI0MzY0NjY0NmM5
ZjA0NWJiMTFjNTAzZGEzZjViZmE2M2QzNThjNDk4ODlkZDViYTg0YTk1ZTc1YmU3
NmM2YzUwNmUxNWIxYzYwM2NlNyJ9LCJzZXJ2ZXIiOnsicHVibGljS2V5IjoiLS0t
LS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cclxuTUN3d0RRWUpLb1pJaHZjTkFRRUJC
UUFER3dBd0dBSVJBTUlXdmdnbTlMN2ZhMnE2T0hvaDY0VUNBd0VBQVE9PVxyXG4t
LS0tLUVORCBQVUJMSUMgS0VZLS0tLS0iLCJwcml2YXRlS2V5IjoiIiwicGFzc1Bo
cmFzZSI6IjE1Mjc1NGMyNjJlYzY1NjU5MmEwOTdiMjg1MTVlMDlmMDVkODdiNjAy
ZDg5M2FjNDY1NGQzNjIxZTExNjc4NGQ5NmEyODY4ODE3MWEyY2ViMTQ4N2YxZTBm
NTM4MGIxYmU5NTcwYzdmMDQ5ZTlhYjFkOGM5MDRjMGI4MWQ5NmQyYWMwOGFmNTVj
YjhlZGYyMDJjZmQ3YTdlMjEzOWNlYjk1N2Y4MmRmNzU5MzBiMjZjMDdmMDlkOWJk
YzcxNjcwYmRiMTdhZTE3MjE0MTc4MGM0YzVlNmZhNjgyODg4NmQ1MThmNTg0NGIz
ZThjN2ZkOWRjMmNjNGM1NWRjMmYyNDEifX0=

トリミングして、キャリッジ リターン/ライン フィードを削除して、次のようにすることができます。

eyJjbGllbnQiOnsicHVibGljS2V5IjoiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cclxuTUN3d0RRWUpLb1pJaHZjTkFRRUJCUUFER3dBd0dBSVJBSjZmK3cydzRUTWxFN2dUeEt1K0FLTUNBd0VBQVE9PVxyXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0iLCJwcml2YXRlS2V5IjoiLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLVxyXG5NR0VDQVFBQ0VRQ2VuXC9zTnNPRXpKUk80RThTcnZnQ2pBZ01CQUFFQ0VBV1UxMzZaMUxLNTh4TUw5UFB6cStFQ1xyXG5DUURMeE12b2grVGEyd0lKQU1kSTNwNDBOWWZaQWdoMUp2VVJBS2hjQndJSWJmckJJUDRmTE1FQ0NFbWxGUjArXHJcbk5jSWFcclxuLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0iLCJwYXNzUGhyYXNlIjoiODAxYTY5MTZjMDFhMmMyYzQ0OTYyNGQwMzJlZGE2ODczNDFmNTk0NmUyMWYzNmI0Y2NiNGMwYWI4YjRhMzg5MWY5NDc4YzllZjYwZDgzZTk5MzE3OTMwNjM0MTg4OWRlM2IyYTRiMDlhYzVjMGY2YzMwNzRkZWVlYmM0N2FlMTZjM2ZhODFiOWYwNzk3ODE2ZWQwNTkwZDU5NWM2N2MxYzllMmFkZTdjNWQ2ODBhZDIzYmI0MzY0NjY0NmM5ZjA0NWJiMTFjNTAzZGEzZjViZmE2M2QzNThjNDk4ODlkZDViYTg0YTk1ZTc1YmU3NmM2YzUwNmUxNWIxYzYwM2NlNyJ9LCJzZXJ2ZXIiOnsicHVibGljS2V5IjoiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cclxuTUN3d0RRWUpLb1pJaHZjTkFRRUJCUUFER3dBd0dBSVJBTUlXdmdnbTlMN2ZhMnE2T0hvaDY0VUNBd0VBQVE9PVxyXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0iLCJwcml2YXRlS2V5IjoiIiwicGFzc1BocmFzZSI6IjE1Mjc1NGMyNjJlYzY1NjU5MmEwOTdiMjg1MTVlMDlmMDVkODdiNjAyZDg5M2FjNDY1NGQzNjIxZTExNjc4NGQ5NmEyODY4ODE3MWEyY2ViMTQ4N2YxZTBmNTM4MGIxYmU5NTcwYzdmMDQ5ZTlhYjFkOGM5MDRjMGI4MWQ5NmQyYWMwOGFmNTVjYjhlZGYyMDJjZmQ3YTdlMjEzOWNlYjk1N2Y4MmRmNzU5MzBiMjZjMDdmMDlkOWJkYzcxNjcwYmRiMTdhZTE3MjE0MTc4MGM0YzVlNmZhNjgyODg4NmQ1MThmNTg0NGIzZThjN2ZkOWRjMmNjNGM1NWRjMmYyNDEifX0=

base64 でデコードすると、次のようになります。

{"client":{"publicKey":"-----BEGIN PUBLIC KEY-----\r\nMCwwDQYJKoZIhvcNAQEBBQADGwAwGAIRAJ6f+w2w4TMlE7gTxKu+AKMCAwEAAQ==\r\n-----END PUBLIC KEY-----","privateKey":"-----BEGIN RSA PRIVATE KEY-----\r\nMGECAQACEQCen\/sNsOEzJRO4E8SrvgCjAgMBAAECEAWU136Z1LK58xML9PPzq+EC\r\nCQDLxMvoh+Ta2wIJAMdI3p40NYfZAgh1JvURAKhcBwIIbfrBIP4fLMECCEmlFR0+\r\nNcIa\r\n-----END RSA PRIVATE KEY-----","passPhrase":"801a6916c01a2c2c449624d032eda687341f5946e21f36b4ccb4c0ab8b4a3891f9478c9ef60d83e993179306341889de3b2a4b09ac5c0f6c3074deeebc47ae16c3fa81b9f0797816ed0590d595c67c1c9e2ade7c5d680ad23bb43646646c9f045bb11c503da3f5bfa63d358c49889dd5ba84a95e75be76c6c506e15b1c603ce7"},"server":{"publicKey":"-----BEGIN PUBLIC KEY-----\r\nMCwwDQYJKoZIhvcNAQEBBQADGwAwGAIRAMIWvggm9L7fa2q6OHoh64UCAwEAAQ==\r\n-----END PUBLIC KEY-----","privateKey":"","passPhrase":"152754c262ec656592a097b28515e09f05d87b602d893ac4654d3621e116784d96a28688171a2ceb1487f1e0f5380b1be9570c7f049e9ab1d8c904c0b81d96d2ac08af55cb8edf202cfd7a7e2139ceb957f82df75930b26c07f09d9bdc71670bdb17ae172141780c4c5e6fa6828886d518f5844b3e8c7fd9dc2cc4c55dc2f241"}}
于 2013-11-15T19:19:40.623 に答える