JavaScript实现银行卡号每4位自动插入空格

作者:拾光

时间:2026-10-21

浏览:68

本文介绍如何在Web开发中实现银行卡号输入时的自动格式化功能,即每隔4位数字自动插入一个空格。文章提供了原生JavaScript和jQuery两种实现方案,重点解析了利用正则表达式\S{5}判断输入长度以及replace方法进行格式替换的核心逻辑,并探讨了光标位置修正等细节处理,适用于IE9及以上浏览器环境。

文章目录

原生JavaScript实现方案

首先介绍使用原生JavaScript实现该功能的方法。


!function () {
 document.getElementById('bankCard').onkeyup = function (event) {
  var v = this.value;
  if(/\S{5}/.test(v)){
   this.value = v.replace(/\s/g, '').replace(/(.{4})/g, "$1 ");
  }
 };
}();

jQuery实现方案

接下来展示基于jQuery库的实现方式。


<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title></title>
</head>
<body>
<input type="text" id="J_BankCard"/>
<script src="http://static.ydcss.com/libs/jquery/1.11.2/jquery.js"></script>
<script>
 !function () {
  $('#J_BankCard').on('keyup mouseout input',function(){
   var $this = $(this),
    v = $this.val();
   /\S{5}/.test(v) && $this.val(v.replace(/\s/g,'').replace(/(.{4})/g, "$1 "));
  });
 }();
</script>
</body>
</html>

实现效果为:在用户输入银行卡号时,系统自动每隔4位数字插入一个空格,这是一个常见的前端交互细节。


document.getElementById('bankCardInp').onkeyup = function (event) {
  var v = this.value;
  console.log(/\S{5}/.test(v));
  console.log(v);
  if(/\S{5}/.test(v)){
    this.value = v.replace(/\s/g, '').replace(/(.{4})/g, '$1 ');
  }
};

核心逻辑与正则表达式解析

小编前段时间自己做了个小项目,用到正则,刚好百度了一下,诧异的发现输入银行卡号每隔4位数字加一个空格 居然全部都是清一色的一坨代码,上面大家估计都能理解,当然我整体也能理解: 问题来了

核心逻辑中使用了正则表达式 /\S{5}/.test(v) 来判断是否执行格式化。许多开发者初看此代码可能会产生困惑,误以为需要5个空字符才触发,或者疑惑为何使用大写的\S。实际上,\S代表非空白字符,该正则表达式的作用是检测字符串中是否存在连续5个非空白字符。一旦检测到第5个非空白字符,即说明当前输入长度已超过4位,此时便触发格式化逻辑,将前4位数字后添加空格。这一设计巧妙地利用了正则匹配的特性,避免了复杂的长度判断。

兼容性说明与交互优化

该功能旨在实现银行卡号每4位插入空格的效果,在用户填写银行卡信息时非常实用。需要注意的是,此实现方案兼容IE9及以上版本的浏览器。


<!DOCTYPE html>
<html>

<head lang="en">
  <meta charset="UTF-8">
  <title>银行卡号4位空格</title>
  <script src="http://j2.58cdn.com.cn/js/jquery-1.8.3.js"></script>
</head>

<body>
  <input type="text" id="kahao" />
  <script>
    $(function() {

      $('#kahao').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
        
        }
      })
    })
  </script>
</body>

</html>

以支付宝为例,为了兼顾兼容性和用户体验,其界面设计中采用悬浮提示框来展示分段的卡号。这种视觉呈现方式同样易于实现,且能提供更清晰的反馈。

原生JavaScript实现方案

以上介绍了利用JavaScript实现银行卡号每隔4位数字自动添加空格的完整方案,希望能为读者提供有价值的参考。如有任何疑问,欢迎留言交流,笔者将及时回复。同时感谢各位对本站的支持。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章