-2

ドイツまたはオーストリアのイバンを検証したい。

['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);

        }],

DE19 1234 1234 1234 1234 12 (2 つの文字と 20 の数字) のようなドイツの IBAN または AT6119043002345732201 (2 つの文字と 18 の数字) のようなオーストリアの IBAN を確認したい

しかし、うまくいきません。なにが問題ですか?

どうもありがとう (-:

4

1 に答える 1

0

あなたは新しい正規表現構文を発明しましたが、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;
},
于 2015-04-04T02:46:02.013 に答える