基于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 相关文章推荐
dojo学习第一天 Tab选项卡 实现
Aug 28 Javascript
拥抱模块化的JavaScript
Mar 07 Javascript
基于jQuery的弹出框插件
Mar 18 Javascript
浏览器解析js生成的html出现样式问题的解决方法
Apr 16 Javascript
JS如何判断移动端访问设备并解析对应CSS
Nov 27 Javascript
JS实现在网页中弹出一个输入框的方法
Mar 03 Javascript
javascript中callee与caller的区别分析
Apr 20 Javascript
jQuery实现的简单拖拽功能示例
Sep 13 Javascript
Angular 2应用的8个主要构造块有哪些
Oct 17 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
Dec 26 Javascript
jQuery图片拖动组件Dropzone用法示例
Jan 17 Javascript
Vue实现购物车实例代码两则
May 30 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
smarty模板引擎之分配数据类型
2015/03/30 PHP
JS实现鼠标经过好友列表中的好友头像时显示资料卡的效果
2014/07/02 Javascript
Jquery实现地铁线路指示灯提示牌效果的方法
2015/03/02 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
JS中的==运算: [''] == false —&gt;true
2016/07/24 Javascript
JS实现倒计时(天数、时、分、秒)
2016/11/16 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
2017/04/21 Javascript
AngularJS中使用three.js的实例详解
2017/07/21 Javascript
详解Nuxt.js Vue服务端渲染摸索
2018/02/08 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
使用vuex的state状态对象的5种方式
2018/04/19 Javascript
微信小程序中上传图片并进行压缩的实现代码
2018/08/28 Javascript
vue中Element-ui 输入银行账号每四位加一个空格的实现代码
2018/09/14 Javascript
前后端常见的几种鉴权方式(小结)
2019/08/04 Javascript
JavaScript键盘事件响应顺序详解
2019/09/30 Javascript
vue实现购物车的监听
2020/04/20 Javascript
python实现简单socket通信的方法
2016/04/19 Python
利用 Monkey 命令操作屏幕快速滑动
2016/12/07 Python
Python基于回溯法子集树模板解决取物搭配问题实例
2017/09/02 Python
django认证系统实现自定义权限管理的方法
2019/08/28 Python
python将字符串转变成dict格式的实现
2019/11/18 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
html5 canvas 使用示例
2010/10/22 HTML / CSS
千禧酒店及度假村官方网站:Millennium Hotels and Resorts
2019/05/10 全球购物
高三生物教学反思
2014/01/25 职场文书
12月小学生校园广播稿
2014/02/04 职场文书
财务担保书范文
2014/04/02 职场文书
节约用电标语
2014/06/17 职场文书
教师个人读书活动总结
2014/07/08 职场文书
质量月活动总结
2014/08/26 职场文书
农村文化活动总结
2014/08/28 职场文书
2014保险公司内勤工作总结
2014/12/16 职场文书
总结Java对象被序列化的两种方法
2021/06/30 Java/Android
JavaScript模拟实现网易云轮播效果
2022/04/04 Javascript
MySQL查询日期时间
2022/05/15 MySQL