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;
},
Другие вопросы по тегам