基于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 相关文章推荐
jQuery函数的等价原生函数代码示例
May 27 Javascript
用jquery方法操作radio使其默认选项是否
Sep 10 Javascript
纯js简单日历实现代码
Oct 05 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
Jan 04 Javascript
javascript类型系统 Array对象学习笔记
Jan 09 Javascript
微信小程序中实现一对多发消息详解及实例代码
Feb 14 Javascript
js实现仿购物车加减效果
Mar 01 Javascript
Vue中的ref作用详解(实现DOM的联动操作)
Aug 21 Javascript
VsCode新建VueJs项目的详细步骤
Sep 23 Javascript
JS实现数组深拷贝的方法分析
Mar 06 Javascript
在vue中给后台接口传的值为数组的格式代码
Nov 12 Javascript
Js类的构建与继承案例详解
Sep 15 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简单获取上月、本月、近15天、近30天的方法示例
2017/07/03 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
laravel利用中间件做防非法登录和权限控制示例
2019/10/21 PHP
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
2010/04/27 Javascript
JQuery解析XML的方法小结
2016/04/02 Javascript
轻松5句话解决JavaScript的作用域
2016/07/15 Javascript
js实现瀑布流效果(自动生成新的内容)
2017/03/16 Javascript
vue操作下拉选择器获取选择的数据的id方法
2018/08/24 Javascript
详解vue的双向绑定原理及实现
2019/05/05 Javascript
vue+elementUi图片上传组件使用详解
2019/08/20 Javascript
Vue学习笔记之计算属性与侦听器用法
2019/12/07 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
[40:03]RNG vs VG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
浅谈Python中函数的参数传递
2016/06/21 Python
Django自定义分页效果
2017/06/27 Python
tensorflow 使用flags定义命令行参数的方法
2018/04/23 Python
pandas读取csv文件,分隔符参数sep的实例
2018/12/12 Python
谈谈Python中的while循环语句
2019/03/10 Python
在django view中给form传入参数的例子
2019/07/19 Python
python日志模块logbook使用方法
2019/09/19 Python
pyqt5数据库使用详细教程(打包解决方案)
2020/03/25 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
Python中无限循环需要什么条件
2020/05/27 Python
python新手学习使用库
2020/06/11 Python
html5 figure和figcaption的使用方法
2018/09/10 HTML / CSS
日本著名化妆品零售网站:Cosme Land
2019/03/01 全球购物
德语专业求职信
2014/03/12 职场文书
2014全年工作总结
2014/11/27 职场文书
劳动保障个人工作总结
2015/03/04 职场文书
2015年学校关工委工作总结
2015/04/03 职场文书
学校捐款活动总结
2015/05/09 职场文书
2015年统战工作总结
2015/05/19 职场文书
Golang 获取文件md5校验的方法以及效率对比
2021/05/08 Golang
Python实战之疫苗研发情况可视化
2021/05/18 Python
Python实现机器学习算法的分类
2021/06/03 Python
华为HarmonyOS3.0强在哪? 看看鸿蒙3.0这7个小功能
2023/01/09 数码科技