我想验证德国人或奥地利伊班人。
['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 个数字(
但它不起作用。怎么了?
非常感谢(-:
你发明了一种新的正则表达式语法,但你忘了告诉Javascript维护者来实现它。没有比[AT || DE]
更w{18 || 20}
.
您需要:
- 首先删除所有空格
- 检查正则表达式
/DEd{20}|ATd{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;
},