2015-03-26 2 views
-2

Я хочу проверить немецкий или австрийский iban.Проверка Javascript 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 (две буквы и 20numbers) или австрийском IBAN как AT6119043002345732201 (2letters и 18 номеров)

Но он не работает. Что не так?

спасибо (-:

+0

Попробуйте https://github.com/arhs/iban.js – jgillich

ответ

0

Вы изобрели новые регулярки синтаксиса, но не забыло сказать, сопровождающее Javascript для его реализации Там ничего подобного [AT || DE] ни \w{18 || 20}

Вам нужно:..

  • первое падение все пространства
  • проверить регулярное выражение /DE\d{20}|AT\d{18}/
  • check the sum

Я думаю, проверка суммы является самой важной частью, поскольку она мешает пользователям вводить бессмыслицу по ошибке.

Как отмечается в комментарии, для этого доступно 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; 
}, 
Смежные вопросы