基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
难点不是插入空格,而是修正光标的位置,这个只支持IE9+、chrome浏览器
注意:这个使用了jquery框架
核心代码
$(function(){
$('#kahao').on('keyup',function(e){
//只对输入数字时进行处理
if((e.which>=48&&e.which<=57)||
(e.which>=96&&e.which<=105)){
//获取当前光标的位置
varcaret=this.selectionStart
//获取当前的value
varvalue=this.value
//从左边沿到坐标之间的空格数
varsp=(value.slice(0,caret).match(/\s/g)||[]).length
//去掉所有空格
varnospace=value.replace(/\s/g,'')
//重新插入空格
varcurVal=this.value=nospace.replace(/(\d{4})/g,"$1").trim()
//从左边沿到原坐标之间的空格数
varcurSp=(curVal.slice(0,caret).match(/\s/g)||[]).length
//修正光标位置
this.selectionEnd=this.selectionStart=caret+curSp-sp
}
})
})
完整代码:已经测试
<!DOCTYPEhtml>
<html>
<headlang="en">
<metacharset="UTF-8">
<title>银行卡号4位空格</title>
<scriptsrc="http://j2.58cdn.com.cn/js/jquery-1.8.3.js"></script>
</head>
<body>
<inputtype="text"id="kahao"/>
<script>
$(function(){
$('#kahao').on('keyup',function(e){
//只对输入数字时进行处理
if((e.which>=48&&e.which<=57)||
(e.which>=96&&e.which<=105)){
//获取当前光标的位置
varcaret=this.selectionStart
//获取当前的value
varvalue=this.value
//从左边沿到坐标之间的空格数
varsp=(value.slice(0,caret).match(/\s/g)||[]).length
//去掉所有空格
varnospace=value.replace(/\s/g,'')
//重新插入空格
varcurVal=this.value=nospace.replace(/(\d{4})/g,"$1").trim()
//从左边沿到原坐标之间的空格数
varcurSp=(curVal.slice(0,caret).match(/\s/g)||[]).length
//修正光标位置
this.selectionEnd=this.selectionStart=caret+curSp-sp
}
})
})
</script>
</body>
</html>
经过测试确实很好用,里面用到了很多的正则
\s匹配任何空白字符,包括空格、制表符、换页符等等。等价于[\f\n\r\t\v]。
关于正则表达式的教程可以参考这篇文章:
https://www.nhooo.com/tools/zhengze.html
https://www.nhooo.com/tools/regexsc.htm