对输入进行校验和验证,以检查Javascript中输入的三个部分

对输入进行校验和验证,以检查Javascript中输入的三个部分,javascript,jquery,validation,try-catch,parseint,Javascript,Jquery,Validation,Try Catch,Parseint,把我的头从墙上弹下来,想找出更好的方法来处理这件事。我有一个大的输入值,它有三个检查来检查字符串某些部分的总和,以便验证它。我现在在一个函数中使用三个try/catch块来运行检查,除了最终的验证检查似乎总是返回true之外,它似乎正在工作。我想知道的是a)这是一个好方法吗,b)有没有更干净的方法来处理for循环,c)为什么我的最终检查没有做任何事情。感谢您的帮助。如果有帮助的话,我可以访问jQuery和underline.js,但我对underline的使用不多。我在这里拉了把小提琴: 根据

把我的头从墙上弹下来,想找出更好的方法来处理这件事。我有一个大的输入值,它有三个检查来检查字符串某些部分的总和,以便验证它。我现在在一个函数中使用三个try/catch块来运行检查,除了最终的验证检查似乎总是返回true之外,它似乎正在工作。我想知道的是a)这是一个好方法吗,b)有没有更干净的方法来处理for循环,c)为什么我的最终检查没有做任何事情。感谢您的帮助。如果有帮助的话,我可以访问jQuery和underline.js,但我对underline的使用不多。我在这里拉了把小提琴:


根据经验,您可能希望在try块中尽可能多地分离数学。JavaScript有一种处理变量的奇怪方式,并且可能没有做到您认为的那样

下面是一个方法

我没有抛出任何错误,只有当数字不可解析时才可能出现错误,所以如果您愿意,您可以抛出它,否则,如果您的总和检查可以验证这应该足够好的话

window.onkeyup=keyup;
var数;
功能键控(e){
数字=e.目标值;
$('#numberValue')。文本(数字);
//长度必须为10个字符
如果(number.length!==30){
返回false;
}
数字=“”+(数字| |“”);
var-valid=false;
//试一试{
var sum1=返回和(数字[0,1,2,3,4,5,6,7,8],[7,3,1,7,3,1,7,1]);
var sum2=返回和(数字[13,14,15,16,17,18],[7,3,1,7,3,1]);
var sum3=返回和(数字[21,22,23,24,25,26],[7,3,1,7,3,1]);
/*
//除非你犯了错误
}捕获(e){
有效=错误;
}
*/
if(编号[9]==sum1和编号[19]==sum2和编号[27]==sum3){
console.log(sum1+'|'+sum2+'|'+sum3);
有效=真;
}
console.log('All Good DUde!');
返回有效;
}
函数myParse(n){
返回值(isNaN(parseInt(n,10))?-1:parseInt(n,10);
}
函数returnSum(n,ind,mul){
var acc=0;
var-pNum=0;

对于(var i=0;我工作正常。我可能使用了一些错误的str,请给我示例输入字符串(需要输入字符串和输出)对样本测试编号进行了更新:4870136753111199070109160101300如果编号不正确,则失败不适用于尝试捕获…因此在本例中,与测试编号分别不匹配的第10、20和28个编号(3、0和3)应失败。这可能更容易看到:4870136753xx9907010x1601013xx您期望的是什么如果((数字[27],29)==(“”+checkDigit3)){这将始终返回29??我认为parseInt将第二个参数作为基数,如果您只放置29 w/o一个函数,它将始终返回第二个参数。例如
('anything',29)
将返回29我想您需要检查
如果((数字[27],29)==(“”+checkDigit3)){
这个语句很酷。现在您需要的是一个else,第二个和第三个应该有一个类似if(!valid&&your existing logic)的检查,否则,如果第2个或第3个条件为真,则即使第1个条件无效,也会使整个结果为真。我认为我应该将变量声明移出try逻辑。它似乎可以针对校验和进行多个测试。但我真正要做的是将所有parseInt声明写入更干净的内容。另一个通过的er测试编号:6612760563XXX3010068X1601013XX这可能会有很大帮助,parseInt接受X的:啊,所以即使基数是可选的,最好不要遗漏它。太棒了。我得到了我添加的else语句,以停止最后用一个额外的else语句停止try块,并在parseInt声明中放入基数10。看起来仍然是li有一个更好的方法来建立这个:这可能会有帮助,我试着把你的方法重写得更干净一点:我喜欢。让我看看这是否有效。我想这与e.target和chrome spits out不能读取长度的属性有关。但似乎是有效的。关于e.target:我想可能就是它。我也一直在关注这个我的头开始痛了。它肯定比我的干净,但还有另一个等式和正则表达式检查。给我一个小时重新检查,但我认为你赢了。谢谢。
     window.onkeyup = keyup;
    var number;

    function keyup(e) {
        number = e.target.value;
        $('#numberValue').text(number);
        // must be 10 characters long
        if (number.length !== 30) {
            return false;
        }
        number = "" + (number || "");
        // run the checksum
        var valid = false;
        try {
            var sum = (parseInt(number[0]) * 7) +
                    (parseInt(number[1]) * 3) +
                    (parseInt(number[2])) +
                    (parseInt(number[3]) * 7) +
                    (parseInt(number[4]) * 3) +
                    (parseInt(number[5])) +
                    (parseInt(number[6]) * 7) +
                    (parseInt(number[7]) * 3) +
                    (parseInt(number[8]));
            alert(((sum % 10).toFixed(0)));
            var checkDigit = ((sum % 10).toFixed(0));

            if ((number[9]) === ("" + checkDigit)) {
                alert('Our Checkdigit is valid', checkDigit);
                valid = true;
            }
        } catch (e) {
            alert('Fail for check 1!');
            valid = false;
        }
        try {
            var sum2 = (parseInt(number[13]) * 7) +
                    (parseInt(number[14]) * 3) +
                    (parseInt(number[15])) +
                    (parseInt(number[16]) * 7) +
                    (parseInt(number[17]) * 3) +
                    (parseInt(number[18]));
            alert(((sum2 % 10).toFixed(0)));
            var checkDigit2 = ((sum2 % 10).toFixed(0));

            if ((number[19]) === ("" + checkDigit2)) {
                alert('Our Checkdigit2 is valid', checkDigit2);
                valid = true;
            }
        } catch (e) {
            alert('Fail for check 2!');
            valid = false;
        }
        try {
            var sum3 = (parseInt(number[21]) * 7) +
                    (parseInt(number[22]) *3) +
                    (parseInt(number[23])) +
                    (parseInt(number[24]) * 7) +
                    (parseInt(number[25]) * 3) +
                    (parseInt(number[26]));
            alert(((sum3 % 10).toFixed(0)));
            var checkDigit3 = ((sum3 % 10).toFixed(0));

            if ((number[27]) === ("" + checkDigit3)) {
                alert('Our Checkdigit3 is valid',checkDigit3);
                valid = true;
            }
        } catch (e) {
            valid = false;
        }

        alert('All Good DUde!');
        return valid;
    }