基于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 Study Notes学习笔记 (二)
Aug 04 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
Nov 20 Javascript
jquery中append()与appendto()用法分析
Nov 14 Javascript
JavaScript设计模式之外观模式介绍
Dec 28 Javascript
jquery中animate的stop()方法作用实例分析
Jan 30 Javascript
jQuery+HTML5美女瀑布流布局实现方法
Sep 21 Javascript
利用CSS3在Angular中实现动画
Jan 15 Javascript
JavaScript时间操作之年月日星期级联操作
Jan 15 Javascript
Angularjs 自定义服务的三种方式(推荐)
Aug 02 Javascript
jQuery EasyUI 页面加载等待及页面等待层
Feb 06 Javascript
JavaScript数据结构学习之数组、栈与队列
May 02 Javascript
如何使用RoughViz可视化Vue.js中的草绘图表
Jan 30 Vue.js
详解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实现mysql数据库备份类
2008/03/20 PHP
php中判断数组是一维,二维,还是多维的解决方法
2013/05/04 PHP
PHP连接和操作MySQL数据库基础教程
2014/09/29 PHP
PHP输入输出流学习笔记
2015/05/12 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
PHP new static 和 new self详解
2017/02/19 PHP
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
javascript学习笔记--数字格式类型
2014/05/22 Javascript
深入理解javascript变量声明
2014/11/20 Javascript
jquery插件jSignature实现手动签名
2015/05/04 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
2016/01/22 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
nodejs 子进程正确的打开方式
2017/07/03 NodeJs
简单的Vue SSR的示例代码
2018/01/12 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
详解jQuery设置内容和属性
2019/04/11 jQuery
js实现翻牌小游戏
2020/07/31 Javascript
python验证码识别的示例代码
2017/09/21 Python
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
Pycharm保存不能自动同步到远程服务器的解决方法
2019/06/27 Python
TensorFLow 不同大小图片的TFrecords存取实例
2020/01/20 Python
利用 Python ElementTree 生成 xml的实例
2020/03/06 Python
Django操作session 的方法
2020/03/09 Python
Python内置函数locals和globals对比
2020/04/28 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
2020/06/11 Python
HTML5 Canvas像素处理使用接口介绍
2012/12/02 HTML / CSS
法国一家多品牌成衣精品中/高档商店:Graduate Store
2019/08/28 全球购物
JD Sports西班牙:英国领先的运动服装公司
2020/01/06 全球购物
介绍一下结构化程序设计方法和面向对象程序设计方法的区别
2012/06/27 面试题
初婚未育未抱养证明
2014/01/12 职场文书
银行员工犯错检讨书
2014/09/16 职场文书
代办出身证明书
2014/10/21 职场文书
人与自然观后感
2015/06/16 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书
七年级作文之下雨天
2019/12/23 职场文书
Python如何解决secure_filename对中文不支持问题
2021/07/16 Python