Javascript IBAN Проверка. Проверьте немецкий или австрийский IBAN
Я хочу проверить немецкий или австрийский 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 цифр)
Но это не работает. Что случилось?
Большое спасибо (-:
1 ответ
Вы изобрели новый синтаксис регулярных выражений, но забыли сообщить сопровождающему 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;
},