简体   繁体   English

使用addMethod()的jQuery验证器自定义规则

[英]jquery validator custom rules using addMethod()

I'm very new to jquery validator and I'm running into some trouble figuring out how to extend it with custom rules using addMethod. 我对jquery验证程序非常陌生,并且在弄清楚如何使用addMethod使用自定义规则扩展它时遇到了一些麻烦。 I need to take base64 encoded content from a text field, trim the line feeds, and decode it. 我需要从文本字段中获取base64编码的内容,修剪换行符并对其进行解码。 Here's what I've done so far but it's been very hard to troubleshoot because I can not get the form to stop submitting automatically. 到目前为止,这是我所做的事情,但是很难进行故障排除,因为我无法获取自动停止提交的表单。 Can anyone tell me why these two methods are not working? 谁能告诉我为什么这两种方法不起作用?

$.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
            }
        }
    });
});

To explain my goal here a little better, I needed to take some phpseclib key information which was json_encode(), base64_encode(), chunk_split(), emailed and reverse the entire process in the browser for localstorage via copy/paste to a textarea form. 为了更好地解释我的目标,我需要获取一些phpseclib密钥信息,这些信息是json_encode(),base64_encode(),chunk_split(),通过电子邮件发送并通过复制/粘贴到textarea形式将浏览器的整个过程反向进行本地存储。 Now that I managed to get my own code working properly I hope there is some information in what I was attempting to achieve that can help someone else. 现在,我设法使自己的代码正常工作,我希望尝试获得的信息可以对其他人有所帮助。

With a lot more reading and tinkering I managed to get what I was attempting to do above working fully with the help of the Base64/UTF-8 Encode/Decode library found here: https://gist.github.com/Nijikokun/5192472 通过更多的阅读和修补,我得以在这里找到的Base64 / UTF-8编码/解码库的帮助下,完全尝试了上面的工作: https://gist.github.com/Nijikokun/5192472 : https://gist.github.com/Nijikokun/5192472

Note: Save a local copy of the base64-utf8.module.js to your server because using it from GitHub like a CDN doesn't appear to work in all cases. 注意:将base64-utf8.module.js的本地副本保存到您的服务器,因为从GitHub像CDN一样使用它并非在所有情况下都有效。 My browser (Chrome v30.0.1) complains about it being text/plain instead of text/javascript or application/javascript and eventually errors out with Uncaught ReferenceError: base64 is not defined if run. 我的浏览器(Chrome v30.0.1)抱怨它是文本/纯文本,而不是文本/ javascript或应用程序/ javascript,最终出现Uncaught ReferenceError: base64 is not defined错误Uncaught ReferenceError: base64 is not defined如果运行, Uncaught ReferenceError: base64 is not defined

Here is a full copy of the updated code. 这是更新代码的完整副本。

$.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
            }
        }
    });
});

So when submitting a block of chunk_split, base64 encoded content like this: 因此,当提交块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=

It can now be trimmed and have it's carriage returns/line feeds remove to look like this: 现在可以对其进行修剪,并删除回车符/换行符,如下所示:

eyJjbGllbnQiOnsicHVibGljS2V5IjoiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cclxuTUN3d0RRWUpLb1pJaHZjTkFRRUJCUUFER3dBd0dBSVJBSjZmK3cydzRUTWxFN2dUeEt1K0FLTUNBd0VBQVE9PVxyXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0iLCJwcml2YXRlS2V5IjoiLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLVxyXG5NR0VDQVFBQ0VRQ2VuXC9zTnNPRXpKUk80RThTcnZnQ2pBZ01CQUFFQ0VBV1UxMzZaMUxLNTh4TUw5UFB6cStFQ1xyXG5DUURMeE12b2grVGEyd0lKQU1kSTNwNDBOWWZaQWdoMUp2VVJBS2hjQndJSWJmckJJUDRmTE1FQ0NFbWxGUjArXHJcbk5jSWFcclxuLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0iLCJwYXNzUGhyYXNlIjoiODAxYTY5MTZjMDFhMmMyYzQ0OTYyNGQwMzJlZGE2ODczNDFmNTk0NmUyMWYzNmI0Y2NiNGMwYWI4YjRhMzg5MWY5NDc4YzllZjYwZDgzZTk5MzE3OTMwNjM0MTg4OWRlM2IyYTRiMDlhYzVjMGY2YzMwNzRkZWVlYmM0N2FlMTZjM2ZhODFiOWYwNzk3ODE2ZWQwNTkwZDU5NWM2N2MxYzllMmFkZTdjNWQ2ODBhZDIzYmI0MzY0NjY0NmM5ZjA0NWJiMTFjNTAzZGEzZjViZmE2M2QzNThjNDk4ODlkZDViYTg0YTk1ZTc1YmU3NmM2YzUwNmUxNWIxYzYwM2NlNyJ9LCJzZXJ2ZXIiOnsicHVibGljS2V5IjoiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cclxuTUN3d0RRWUpLb1pJaHZjTkFRRUJCUUFER3dBd0dBSVJBTUlXdmdnbTlMN2ZhMnE2T0hvaDY0VUNBd0VBQVE9PVxyXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0iLCJwcml2YXRlS2V5IjoiIiwicGFzc1BocmFzZSI6IjE1Mjc1NGMyNjJlYzY1NjU5MmEwOTdiMjg1MTVlMDlmMDVkODdiNjAyZDg5M2FjNDY1NGQzNjIxZTExNjc4NGQ5NmEyODY4ODE3MWEyY2ViMTQ4N2YxZTBmNTM4MGIxYmU5NTcwYzdmMDQ5ZTlhYjFkOGM5MDRjMGI4MWQ5NmQyYWMwOGFmNTVjYjhlZGYyMDJjZmQ3YTdlMjEzOWNlYjk1N2Y4MmRmNzU5MzBiMjZjMDdmMDlkOWJkYzcxNjcwYmRiMTdhZTE3MjE0MTc4MGM0YzVlNmZhNjgyODg4NmQ1MThmNTg0NGIzZThjN2ZkOWRjMmNjNGM1NWRjMmYyNDEifX0=

And base64 decoded to look like this: 然后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"}}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM