Пользовательские правила валидатора jquery с использованием addMethod ()

0

Я очень новичок в jquery validator, и у меня возникают проблемы с выяснением того, как расширить его с помощью пользовательских правил с помощью addMethod. Мне нужно взять кодированный контент base64 из текстового поля, обрезать линейные каналы и декодировать его. Вот то, что я сделал до сих пор, но было очень сложно устранить неполадки, потому что я не могу заставить форму прекратить отправку автоматически. Может ли кто-нибудь сказать мне, почему эти два метода не работают?

$.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
            }
        }
    });
});
Теги:
validation

1 ответ

0

Чтобы объяснить мою цель здесь немного лучше, мне нужно было взять некоторую ключевую информацию phpseclib, которая была json_encode(), base64_encode(), chunk_split(), отправлена по электронной почте и отменила весь процесс в браузере для localstorage с помощью copy/paste в текстовую область, Теперь, когда мне удалось правильно работать с моим собственным кодом, я надеюсь, что есть какая-то информация о том, чего я пытаюсь достичь, что может помочь кому-то другому.

С большим чтением и мастерингом мне удалось получить то, что я пытаюсь сделать выше, полностью работая с помощью библиотеки Encode/Decode Base64/UTF-8, найденной здесь: https://gist.github.com/Nijikokun/5192472

Примечание. Сохраните локальную копию base64-utf8.module.js на вашем сервере, потому что использование ее из GitHub, как CDN, не работает во всех случаях. Мой браузер (Chrome v30.0.1) жалуется на то, что он является text/plain, а не текстовым /javascript или приложением /javascript, и в конечном итоге ошибки с помощью 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"}}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню