如何将此函数转换为Angular指令

时间:2016-03-19 23:32:52

标签: javascript angularjs real-time

如何将此功能转换为AngularJS指令? 我想让它实时验证用户输入。但即使我试图在控制器中使用它作为常规函数,我也会收到错误:

  

“错误:pesel.substring不是函数”

function decode(pesel) 
{
    var year=parseInt(pesel.substring(0,2),10);
    var month = parseInt(pesel.substring(2,4),10)-1;
    var day = parseInt(pesel.substring(4,6),10);

    if(month>80) {
        year = year + 1800;
        month = month - 80;
    }
    else if(month > 60) {
        year = year + 2200;
        month = month - 60;
    }
    else if (month > 40) {
        year = year + 2100;
        month = month - 40;
    }
    else if (month > 20) {
        year = year + 2000;
        month = month - 20;
    }
    else {
        year += 1900;
    }

    var birthday=new Date();
    birthday.setFullYear(year, month, day);

    var weights = [9,7,3,1,9,7,3,1,9,7];
    var sum = 0

    for(var i=0;i<weights.length;i++) {
        sum+=(parseInt(pesel.substring(i,i+1),10) * weights[i]);
    }

    sum=sum % 10;
    var valid=(sum===parseInt(pesel.substring(10,11),10));

    //sex
    if(parseInt(pesel.substring(9,10),10) % 2 === 1) { 
        var sex='m';
    } else {
        var sex='f';
    }

    return {valid:valid,sex:sex,date:birthday};
}

2 个答案:

答案 0 :(得分:0)

作为Abdo stated above,您传递给函数的值pesel可能不是字符串。

你的函数的第一行应该是:

pesel = (pesel || '').toString();

此行确保您不会对falsey变量进行字符串化,并确保pesel实际上是一个字符串。

答案 1 :(得分:-1)

如果要验证某些输入,请考虑为此目的创建解析器/格式化程序对或验证程序的更好选项。

使用格式化程序/解析器检索生日和性别值,并使用验证程序检查值。

最佳