我想验证德国或奥地利的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个数字)
但它不起作用。有什么问题?
非常感谢( - :
答案 0 :(得分:0)
您已经发明了一种新的正则表达式语法,但是您忘了告诉Javascript维护者实现它。没有类似[AT || DE]
和\w{18 || 20}
的内容。
你需要:
/DE\d{20}|AT\d{18}/
我想,检查总和是最重要的部分,因为它可以防止用户误入错误。
正如评论中所述,可以使用ready to use script。但是,我发现它太复杂了,因为它们防止了太不可能的错误(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;
},