42

私は JavaScript の初心者で、入力テキストに IBAN アカウント登録用のスペース挿入を追加したいと考えています。

<input type="text" name="iban" onkeyup="if(this.value.length > 34){this.value=this.value.substr(0, 34);}" />

私の入力フィールドがあります。誰かが私にこれを行う方法を教えてもらえますか?

4

11 に答える 11

88

既存の回答は比較的長く、やり過ぎのように見えます。さらに、それらは完全には機能しません (たとえば、1 つの問題は、以前の文字を編集できないことです)。

ウィキペディアによると、興味のある方は次のとおりです。

許可されている IBAN 文字は、0 ~ 9 の数字と 26 文字の大文字のラテン アルファベット A ~ Z です。

これは、既存の回答に似た比較的短いバージョンです。

document.getElementById('iban').addEventListener('input', function (e) {
  e.target.value = e.target.value.replace(/[^\dA-Z]/g, '').replace(/(.{4})/g, '$1 ').trim();
});
<label for="iban">iban</label>
<input id="iban" type="text" name="iban" />


前述のように、注意点として、前の文字に戻って編集することはできません。これを修正したい場合は、最初にselectionEndプロパティにアクセスし、正規表現フォーマットが適用された後にキャレットの位置を設定して、キャレットの現在の位置を取得する必要があります。

document.getElementById('iban').addEventListener('input', function (e) {
  var target = e.target, position = target.selectionEnd, length = target.value.length;
  
  target.value = target.value.replace(/[^\dA-Z]/g, '').replace(/(.{4})/g, '$1 ').trim();
  target.selectionEnd = position += ((target.value.charAt(position - 1) === ' ' && target.value.charAt(length - 1) === ' ' && length !== target.value.length) ? 1 : 0);
});
<label for="iban">iban</label>
<input id="iban" type="text" name="iban" />

キャレットの後の文字がスペースの場合、わずかな問題があることに気付くでしょう (最初にキャレットの位置を取得するときにスペースが考慮されていなかったため)。これを修正するには、後続の文字がスペースの場合、位置を手動でインクリメントします (スペースが実際に追加されたと仮定します。これは、文字を置換する前後の長さを比較することによって決定されます)。

于 2015-03-28T18:18:51.033 に答える
1

同じものが必要ですが、BVR/BVR+ スイスの支払いフォームが必要です。したがって、5文字ごとにスペースを追加する必要がありますが、文字列の最後からです。

例:「52 86571 22001 00000 10520 15992」または「843 14293 10520 15992」のように短い場合もあります。

したがって、 rev=1 の場合、スペースを追加する前後の文字列を逆にすることによる解決策は次のとおりです。

function space(str, stp, rev) {
    if (!str) {
        return false;
    }
    if (rev == 1) {
        str = str.split('').reverse().join('');
    }
    if(stp > 0) {
        var v = str.replace(/[^\dA-Z]/g, ''),
            reg = new RegExp(".{" + stp + "}", "g");
        str = v.replace(reg, function (a) {
            return a + ' ';
        });
    }
    if (rev == 1) {
        str = str.split('').reverse().join('');
    }
    return str;
}

使用する :

var refTxt = space(refNum, 5, 1);

編集:PHPバージョンが追加されました

function space($str=false, $stp=0, $rev= false) {

    if(!$str)
        return false;
    
    if($rev)
        return trim(strrev(chunk_split(strrev($str), $stp, ' ')));
    else
        return trim(chunk_split($str, $stp, ' '));
}
于 2016-03-07T13:44:56.430 に答える