-2

我想验证德国或奥地利的 iban。

['validate-IBAN', 'Please enter a valid IBAN.', function (v) {

     var pass=v.strip();
     if (0 == pass.length) {
         return true;
     }
     if (!(/[AT || DE]\w{2}/i.test(v)) || !(/[0-9]\w{18 || 20}/.test(v))) {
         return false;
     }
     return !(pass.length < 20);

        }],

我想检查德国 IBAN,例如 DE19 1234 1234 1234 1234 12(两个字母和 20 个数字)或奥地利 IBAN,例如 AT6119043002345732201(2 个字母和 18 个数字)

但它不起作用。怎么了?

非常感谢 (-:

4

1 回答 1

0

您发明了一种新的正则表达式语法,但是您忘记告诉 Javascript 维护者来实现它。没有什么喜欢[AT || DE]也没有\w{18 || 20}

你需要:

  • 首先删除所有空格
  • 检查正则表达式/DE\d{20}|AT\d{18}/
  • 检查总和

我想,检查总和是最重要的部分,因为它可以防止用户误输入废话。

如评论中所述,有一个现成的可用脚本。但是,我发现它太复杂了,因为它们可以防止太不可能的错误(IBAN 结构错误,但校验和正确)。我自己写了一个简单的函数

isValid: function(x) {
    if (x.length < 5) return false;
    if (!x.match(/[A-Z]{2}[0-9]{2}[A-Z0-9]+/)) return false;
    var ASCII_0 = "0".charCodeAt(0);
    var ASCII_A = "A".charCodeAt(0);
    var acc = 0;
    function add(n) {
        if (acc > 1000000) acc %= 97;
        acc = n < ASCII_A ? 10 * acc + n - ASCII_0 
            : 100 * acc + n - ASCII_A + 10;
    }
    for (var i=4; i<x.length; ++i) add(x.charCodeAt(i));
    for (var i=0; i<4; ++i) add(x.charCodeAt(i));
    acc %= 97;
    return acc == 1;
},
于 2015-04-04T02:46:02.013 回答