基于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拖拽排序效果实现代码
Sep 20 Javascript
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
Oct 17 Javascript
js实现点击图片改变页面背景图的方法
Feb 28 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
Mar 12 Javascript
Jquery中使用show()与hide()方法动画显示和隐藏图片
Oct 08 Javascript
JavaScript使用简单正则表达式的数据验证功能示例
Jan 13 Javascript
详谈js中window.location.search的用法和作用
Feb 13 Javascript
基于Vue实现拖拽效果
Apr 27 Javascript
echarts设置图例颜色和地图底色的方法实例
Aug 01 Javascript
iview Upload组件多个文件上传的示例代码
Sep 30 Javascript
jQuery实现动态向上滚动
Dec 21 jQuery
JavaScript前端面试组合函数
Jun 21 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中如何获取数组的长度以及smarty调用php函数的详解
2013/06/20 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
PHP新建类问题分析及解决思路
2015/11/19 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
2021/03/09 PHP
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
jquery validate poshytip 自定义样式
2012/11/26 Javascript
jquery在IE、FF浏览器的差别详细探讨
2013/04/28 Javascript
jquery.form.js用法之清空form的方法
2014/03/07 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
JavaScript继承模式粗探
2016/01/12 Javascript
瀑布流的实现方式(原生js+jquery+css3)
2020/06/28 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
2016/12/26 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
ES6新特性六:promise对象实例详解
2017/04/21 Javascript
详解webpack4多入口、多页面项目构建案例
2018/05/25 Javascript
JavaScript数组及常见操作方法小结
2019/11/13 Javascript
js实现动态时钟
2020/03/12 Javascript
Vue移动端用淘宝弹性布局lib-flexible插件做适配的方法
2020/05/26 Javascript
python实现将读入的多维list转为一维list的方法
2018/06/28 Python
对Tensorflow中的矩阵运算函数详解
2018/07/27 Python
PyQt5实现类似别踩白块游戏
2019/01/24 Python
基于matplotlib xticks用法详解
2020/04/16 Python
Python selenium使用autoIT上传附件过程详解
2020/05/26 Python
澳大利亚制造的羊皮靴:Original UGG Boots
2017/11/13 全球购物
NIHAOMARKET官方海外旗舰店:意大利你好华人超市
2018/01/27 全球购物
Android面试题附答案
2014/12/08 面试题
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
2016/04/28 面试题
EntityManager都有哪些方法
2013/11/01 面试题
精彩的推荐信范文
2013/11/26 职场文书
工会换届选举方案
2014/05/21 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
建筑横幅标语
2014/10/09 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
Apache Calcite 实现方言转换的代码
2021/04/24 Servers