JS實現input中輸入數字,控制每四位加一個空格(銀行卡號格式)


前言

今天來講講js中實現input中輸入數字,控制每四位加一個空格的方法!這個主要是應用於我們在填寫表單的時候,填寫銀行卡信息,要求我們輸入的數字是四位一個空格!今天主要介紹兩種方式來實現這個方法!但是都運用到了鍵盤碼。下面我就列舉一下鍵盤碼,以備后面查閱!

鍵盤各按鍵對應的數字

keycode 8 = BackSpace      |     keycode 9 = Tab              |   keycode 12 = Clear  
keycode 13 = Enter            |      keycode 16 = Shift           |   keycode 17 = Control 
keycode 18 = Alt               |      keycode 19 = Pause         |  keycode 20 = CapsLock
keycode 27 = Escape        |      keycode 32 = Space         |   keycode 33 = Prior 
keycode 34 = Next            |      keycode 35 = End            |  keycode 36 = Home 
keycode 37 = Left             |       keycode 38 = Up             |   keycode 39 = Right 
keycode 40 = Down          |       keycode 41 = Select         |  keycode 42 = Print 
keycode 43 = Execute      |       keycode 45 = Insert         |   keycode 46 = Delete 
keycode 47 = Help           |       keycode 48 = 0                |   keycode 49 = 1 
keycode 50 = 2                |       keycode 51 = 3                |    keycode 52 = 4 
keycode 53 = 5                |       keycode 54 = 6                |    keycode 55 = 7 
keycode 56 = 8                |       keycode 57 = 9                |    keycode 65 = A 
keycode 66 = B                |        keycode 67 = C              |    keycode 68 = D 
keycode 69 = E                |        keycode 70 = F               |     keycode 71 = G 
keycode 72 = H               |        keycode 73 = I                |    keycode 74 = J 
keycode 75 = K               |         keycode 76 = L               |    keycode 77 = M 
keycode 96 = KP_0          |        keycode 97 = KP_1         |    keycode 98 = KP_2 
keycode 99 = KP_3          |        keycode 100 = KP_4       |    keycode 101 = KP_5 
keycode 102 = KP_6        |         keycode 103 = KP_7      |    keycode 104 = KP_8 
keycode 105 = KP_9        |         keycode 78 = N             |    keycode 79 = O 
keycode 80 = P                |         keycode 81 = Q             |   keycode 82 = R 
keycode 83 = S                |         keycode 84 = T              |    keycode 85 = U 
keycode 86 = V                |         keycode 87 = W            |    keycode 88 = X
keycode 89 = Y               |          keycode 90 = Z              |   keycode 112 = F1  
keycode 113 = F2           |          keycode 114 = F3           |   keycode 115 = F4 
keycode 116 = F5          |           keycode 117 = F6           |   keycode 118 = F7 
keycode 119 = F8          |           keycode 120 = F9           |   keycode 121 = F10 
keycode 122 = F11   

96到105是小鍵盤數字鍵!48到57是大鍵盤的數字鍵!

注意:上面的鍵盤代碼是keydown或者keyup按下的代碼!是按鍵的映射代碼。

keypress鍵盤按下去有些是不一樣的!因為keypress是輸入字符的Unicode。

感興趣的可以去測試一下:

<input type="text" size="50" onkeypress="uniCharCode(event)" onkeydown="uniKeyCode(event)"> 
<p>onkeypress - <span id="demo"></span></p>
<p>onkeydown - <span id="demo2"></span></p>
<script>
function uniCharCode(event) {
    var char = event.which || event.keyCode;
    document.getElementById("demo").innerHTML = " Unicode 字符代碼為: " + char;
}
function uniKeyCode(event) {
    var key = event.keyCode;
    document.getElementById("demo2").innerHTML = " Unicode 鍵代碼為: " + key;
}
</script>

實現方法一

<input type="text" id="haorooms"/>
<script src="http://www.haorooms.com/theme/assets/js/jquery.js"></script>

    !function () {
        $('#haorooms').on('keyup mouseout input',function(e){
       if((e.which >= 48 && e.which <= 57) ||(e.which >= 96 && e.which <= 105 )){
            var $this = $(this),
                v = $this.val();
            /\S{5}/.test(v) && $this.val(v.replace(/\s/g,'').replace(/(.{4})/g, "$1 "));
         }
        });
    }();

上面的方式我們可以用js來實現,代碼如下:

!function () {
    document.getElementById('haorooms').onkeyup = function (event) {
      if((event.which >= 48 && event.which <= 57) ||(event.which >= 96 && event.which <= 105 )){
        var v = this.value;
        if(/\S{5}/.test(v)){
            this.value = v.replace(/\s/g, '').replace(/(.{4})/g, "$1 ");
        }
      };
   }
}();

方法一解釋

上面主要是運用了一些正則表達式,關於正則表達式,記得不是很牢的同學可以查看:http://www.haorooms.com/post/js_regex_refuse

上面的自調用匿名函數我之前文章中也提及過!http://www.haorooms.com/post/js_jquery_chajian 及http://www.haorooms.com/post/qianduan_xnyhbc 等等很多文章提及過!下面我們一起再來復習一下!

我們可以這么寫!

(function(){

})()

當然也可以如下寫:

!function(){}();
+function(){}();
-function(){}();
~function(){}();
~(function(){})();
void function(){}();
(function(){}());

方法二

另外一種方法可以如下寫:

$(function() {

    $('#haorooms').on('keyup', function(e) {
     //只對輸入數字時進行處理
       if((e.which >= 48 && e.which <= 57) ||
               (e.which >= 96 && e.which <= 105 )){
            //獲取當前光標的位置
            var caret = this.selectionStart
            //獲取當前的value
            var value = this.value
            //從左邊沿到坐標之間的空格數
            var sp =  (value.slice(0, caret).match(/\s/g) || []).length
            //去掉所有空格
           var nospace = value.replace(/\s/g, '')
           //重新插入空格
           var curVal = this.value = nospace.replace(/(\d{4})/g, "$1 ").trim()
           //從左邊沿到原坐標之間的空格數
           var curSp = (curVal.slice(0, caret).match(/\s/g) || []).length
          //修正光標位置
         this.selectionEnd = this.selectionStart = caret + curSp - sp

        }
    })
})

$(function() {})這個是$(document).ready(function(){})的簡寫!

方法三 (借鑒留言)

感謝@風蕭蕭兮易水寒1974 留言!

他的方法的核心是

tmp.charAt(i)

當輸入是4的倍數的時候,返回空格+輸入字符,否則返回輸入字符!

代碼如下:

document.getElementById("yourId").addEventListener("input", function(){
    var op="";
    var tmp = document.getElementById("yourId").value.replace(/\D/g, "");
    for (var i=0;i<tmp.length;i++)
    {
        if (i%4===0 && i>0)
        {
            op = op + " " + tmp.charAt(i);
        } else {
            op = op + tmp.charAt(i);

        }
    }
    document.getElementById("yourId").value = op;
});

jquery

$(document).on('input propertychange', '#yourId', function(){
    var op="";
    var tmp = $(this).val().replace(/\D/g, "");
    for (var i=0;i<tmp.length;i++)
    {
        if (i%4===0 && i>0)
        {
            op += " " + tmp.charAt(i);
        } else {
            op += tmp.charAt(i);
        }
    }
    $(this).val(op);
});

這種寫法雖然有效,但是呢,我個人覺得效率可能有點問題(雖然感覺不出來)。

每次輸入的時候,都會把值置為空!然后循環值的長度,再四位加一個空格,每次輸入都會循環一次!這樣太浪費效率了!不過還是感謝風蕭蕭兮易水寒 的思考及見解。謝謝!

小結

第一種方法,當數字輸入的時候,前面所有的輸入,包括字母都會切分成4個一個空格,但是第二種方法,假如后面輸入的是數字,只有當前輸入數字才會被加入空格!個人感覺第二種方法效率更高!

轉自:http://www.haorooms.com/post/js_yinghangkahao


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM