基于jquery实现的银行卡号每隔4位自动插入空格的实现代码


Posted in Javascript onNovember 22, 2016

难点不是插入空格,而是修正光标的位置,这个只支持IE9+、chrome浏览器

注意:这个使用了jquery框架

核心代码

$(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
        
        }
      })
    })

完整代码:已经测试

<!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>

经过测试确实很好用,里面用到了很多的正则

\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。

关于正则表达式的教程可以参考这篇文章:

Javascript 相关文章推荐
csdn 批量接受好友邀请
Feb 19 Javascript
javascript addBookmark 加入收藏 多浏览器兼容
Aug 15 Javascript
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
Mar 20 Javascript
关于scrollLeft,scrollTop的浏览器兼容性测试
Mar 19 Javascript
使用js判断TextBox控件值改变然后出发事件
Mar 07 Javascript
jquery form 隐藏的input 选择
Apr 29 Javascript
jQuery实现智能判断固定导航条或侧边栏的方法
Sep 04 Javascript
vue实现列表的添加点击
Dec 29 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
Nov 06 Javascript
vue中axios解决跨域问题和拦截器的使用方法
Mar 07 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
Nov 09 Javascript
js删除指定位置超链接中含有百度与360的标题
Jan 06 Javascript
详解Js模板引擎(TrimPath)
Nov 22 #Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
Nov 22 #Javascript
AngularJS中指令的四种基本形式实例分析
Nov 22 #Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
Nov 22 #Javascript
微信小程序-图片、录音、音频播放、音乐播放、视频、文件代码实例
Nov 22 #Javascript
详解js中Json的语法与格式
Nov 22 #Javascript
AngularJS中一般函数参数传递用法分析
Nov 22 #Javascript
You might like
PHP生成图像验证码的方法小结(2种方法)
2016/07/18 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
javascript 混合的构造函数和原型方式,动态原型方式
2009/12/07 Javascript
JavaScript中json使用自己总结
2013/08/13 Javascript
得到form下的所有的input的js代码
2013/11/07 Javascript
javascript批量修改文件编码格式的方法
2015/01/27 Javascript
jquery结合CSS使用validate实现漂亮的验证
2015/01/29 Javascript
JS绘制生成花瓣效果的方法
2015/08/05 Javascript
js实现文本框支持加减运算的方法
2015/08/19 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
JS实现类似百叶窗下拉菜单效果
2016/12/30 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
Vue filter介绍及其使用详解
2017/10/21 Javascript
基于jQuery Ajax实现下拉框无刷新联动
2017/12/06 jQuery
基于express中路由规则及获取请求参数的方法
2018/03/12 Javascript
vue+element实现表格新增、编辑、删除功能
2019/05/28 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
vue 动态生成拓扑图的示例
2021/01/03 Vue.js
Mac下Supervisor进程监控管理工具的安装与配置
2014/12/16 Python
Python实现Tab自动补全和历史命令管理的方法
2015/03/12 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
Python global全局变量函数详解
2018/09/18 Python
pandas 层次化索引的实现方法
2019/07/06 Python
Python HTTP下载文件并显示下载进度条功能的实现
2020/04/02 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
Python中关于logging模块的学习笔记
2020/06/03 Python
Python将list元素转存为CSV文件的实现
2020/11/16 Python
英国和国际包裹递送:ParcelCompare
2019/08/26 全球购物
十一个高级MySql面试题
2014/10/06 面试题
手术室护士自我鉴定
2013/10/14 职场文书
党校学习自我鉴定
2014/02/24 职场文书
《冬阳童年骆驼队》教学反思
2014/04/15 职场文书
大学生找工作求职信
2014/07/09 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
MySQL sql_mode的使用详解
2021/05/08 MySQL