前言

今天来讲讲js中实现input中输入数字,控制每四位加一个空格的方法!这个主要是应用于我们在填写表单的时候,填写银行卡信息,要求我们输入的数字是四位一个空格!今天主要介绍两种方式来实现这个方法!但是都运用到了键盘码。下面我就列举一下键盘码,以备后面查阅!

键盘各按键对应的数字

keycode 8 = BackSpace      |     keycode 9 = Tab              |   keycode 12 = Clear
keycode 13 = Enter | keycode 16 = Shift | keycode 17 = Control
keycode 18 = Alt | keycode 19 = Pause | keycode 20 = CapsLock
keycode 27 = Escape | keycode 32 = Space | keycode 33 = Prior
keycode 34 = Next            |      keycode 35 = End            |  keycode 36 = Home
keycode 37 = Left | keycode 38 = Up | keycode 39 = Right
keycode 40 = Down | keycode 41 = Select | keycode 42 = Print
keycode 43 = Execute | keycode 45 = Insert | keycode 46 = Delete
keycode 47 = Help | keycode 48 = 0 | keycode 49 = 1
keycode 50 = 2 | keycode 51 = 3 | keycode 52 = 4
keycode 53 = 5 | keycode 54 = 6 | keycode 55 = 7
keycode 56 = 8 | keycode 57 = 9 | keycode 65 = A
keycode 66 = B | keycode 67 = C | keycode 68 = D
keycode 69 = E | keycode 70 = F | keycode 71 = G
keycode 72 = H | keycode 73 = I | keycode 74 = J
keycode 75 = K | keycode 76 = L | keycode 77 = M
keycode 96 = KP_0 | keycode 97 = KP_1 | keycode 98 = KP_2
keycode 99 = KP_3 | keycode 100 = KP_4 | keycode 101 = KP_5
keycode 102 = KP_6 | keycode 103 = KP_7 | keycode 104 = KP_8
keycode 105 = KP_9 | keycode 78 = N | keycode 79 = O
keycode 80 = P | keycode 81 = Q | keycode 82 = R
keycode 83 = S | keycode 84 = T | keycode 85 = U
keycode 86 = V | keycode 87 = W | keycode 88 = X
keycode 89 = Y | keycode 90 = Z | keycode 112 = F1
keycode 113 = F2 | keycode 114 = F3 | keycode 115 = F4
keycode 116 = F5 | keycode 117 = F6 | keycode 118 = F7
keycode 119 = F8 | keycode 120 = F9 | keycode 121 = F10
keycode 122 = F11

96到105是小键盘数字键!48到57是大键盘的数字键!

注意:上面的键盘代码是keydown或者keyup按下的代码!是按键的映射代码。

keypress键盘按下去有些是不一样的!因为keypress是输入字符的Unicode。

感兴趣的可以去测试一下:

<input type="text" size="50" onkeypress="uniCharCode(event)" onkeydown="uniKeyCode(event)">
<p>onkeypress - <span id="demo"></span></p>
<p>onkeydown - <span id="demo2"></span></p>
<script>
function uniCharCode(event) {
var char = event.which || event.keyCode;
document.getElementById("demo").innerHTML = " Unicode 字符代码为: " + char;
}
function uniKeyCode(event) {
var key = event.keyCode;
document.getElementById("demo2").innerHTML = " Unicode 键代码为: " + key;
}
</script>

实现方法一

<input type="text" id="haorooms"/>
<script src="http://www.haorooms.com/theme/assets/js/jquery.js"></script> !function () {
$('#haorooms').on('keyup mouseout input',function(e){
if((e.which >= 48 && e.which <= 57) ||(e.which >= 96 && e.which <= 105 )){
var $this = $(this),
v = $this.val();
/\S{5}/.test(v) && $this.val(v.replace(/\s/g,'').replace(/(.{4})/g, "$1 "));
}
});
}();

上面的方式我们可以用js来实现,代码如下:

!function () {
document.getElementById('haorooms').onkeyup = function (event) {
if((event.which >= 48 && event.which <= 57) ||(event.which >= 96 && event.which <= 105 )){
var v = this.value;
if(/\S{5}/.test(v)){
this.value = v.replace(/\s/g, '').replace(/(.{4})/g, "$1 ");
}
};
}
}();

方法一解释

上面主要是运用了一些正则表达式,关于正则表达式,记得不是很牢的同学可以查看:http://www.haorooms.com/post/js_regex_refuse

上面的自调用匿名函数我之前文章中也提及过!http://www.haorooms.com/post/js_jquery_chajian 及http://www.haorooms.com/post/qianduan_xnyhbc 等等很多文章提及过!下面我们一起再来复习一下!

我们可以这么写!

(function(){

})()

当然也可以如下写:

!function(){}();
+function(){}();
-function(){}();
~function(){}();
~(function(){})();
void function(){}();
(function(){}());

方法二

另外一种方法可以如下写:

$(function() {

    $('#haorooms').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 }
})
}) $(function() {})这个是$(document).ready(function(){})的简写!

方法三 (借鉴留言)

感谢@风萧萧兮易水寒1974 留言!

他的方法的核心是

tmp.charAt(i)

当输入是4的倍数的时候,返回空格+输入字符,否则返回输入字符!

代码如下:

document.getElementById("yourId").addEventListener("input", function(){
var op="";
var tmp = document.getElementById("yourId").value.replace(/\D/g, "");
for (var i=0;i<tmp.length;i++)
{
if (i%4===0 && i>0)
{
op = op + " " + tmp.charAt(i);
} else {
op = op + tmp.charAt(i); }
}
document.getElementById("yourId").value = op;
});

jquery

$(document).on('input propertychange', '#yourId', function(){
var op="";
var tmp = $(this).val().replace(/\D/g, "");
for (var i=0;i<tmp.length;i++)
{
if (i%4===0 && i>0)
{
op += " " + tmp.charAt(i);
} else {
op += tmp.charAt(i);
}
}
$(this).val(op);
});

这种写法虽然有效,但是呢,我个人觉得效率可能有点问题(虽然感觉不出来)。

每次输入的时候,都会把值置为空!然后循环值的长度,再四位加一个空格,每次输入都会循环一次!这样太浪费效率了!不过还是感谢风萧萧兮易水寒 的思考及见解。谢谢!

小结

第一种方法,当数字输入的时候,前面所有的输入,包括字母都会切分成4个一个空格,但是第二种方法,假如后面输入的是数字,只有当前输入数字才会被加入空格!个人感觉第二种方法效率更高!

转自:http://www.haorooms.com/post/js_yinghangkahao

JS实现input中输入数字,控制每四位加一个空格(银行卡号格式)的更多相关文章

  1. js验证input是否输入数字

    onkeyup="if(isNaN(value))execCommand('undo')" onafterpaste="if(isNaN(value))execComma ...

  2. js 每隔四位加一个空格

    var str = '2016060520103600466'; var str=str.replace(/\s/g,'').replace(/(.{4})/g,"$1 "); a ...

  3. js控制input框输入数字时,累计求和

    input框输入数字时,自动开始计算累加 <div class="form-group"> <label for="inputPassword3&quo ...

  4. js限制input只能输入有效的数字,有且只有一个小数点,第一个不能为小数点-备

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. INPUT只能输入数字

    input只能输入数字: (只能输入数字,并且输入的值不能大于99),但是这样有个问题,就是当输入非数字字符时,输入框中所有的字符都会被清除 <input type="text&quo ...

  6. 编辑表格输入内容、根据input输入框输入数字动态生成表格行数、编辑表格内容提交传给后台数据处理

    编辑表格输入内容.根据input输入框输入数字动态生成表格行数.编辑表格内容提交传给后台数据处理 记录自己学习做的东西,写的小demo,希望对大家也有帮助! 代码如下: <!DOCTYPE ht ...

  7. 限制HTML的input只能输入数字、英文、汉字...

    限制HTML的input只能输入数字.英文.汉字... 关键词:正则表达式, JavaScript, HTML, input 常用HTML正则表达式1.只能输入数字和英文的:<input onk ...

  8. JS 捕获 input 中 键盘按键

    JS 捕获 input 中 键盘按键 的相应处理事件是很简单的,google搜索一下很容易找到处理方式,请看如下一种简单的处理方式: HTML代码: <div> <input typ ...

  9. input验证码框,输入非数字或非12位时,红框提示;每4位加一个空格

    以下代码:input验证码框,输入非数字或非12位时,红框提示;每4位加一个空格 //input验证码框,输入非数字或非12位时,红框提示;每3位加一个空格 $(".text"). ...

随机推荐

  1. shell 变量的数值计算实践 expr

    expr(evaluate(求值)expressions(表达式))命令既可以用于整数运算,也可以用于相关字符串长度.匹配等的运算处理 expr 用做计算 必须有一个空格才会计算 [root@salt ...

  2. redis缓存和mysql数据库同步

    附redis关于缓存雪崩和缓存穿透,热点key 穿透 穿透:频繁查询一个不存在的数据,由于缓存不命中,每次都要查询持久层.从而失去缓存的意义. 解决办法: 持久层查询不到就缓存空结果,查询时先判断缓存 ...

  3. Python3学习之路~4.3 装饰器

    定义:本质是函数,装饰其他函数就是为其他函数添加附加功能. 原则: 不能修改被装饰函数的源代码 不能修改被装饰函数的调用方式 实现装饰器知识储备: 函数即“变量” 高阶函数 把一个函数名当做实参传递给 ...

  4. 003-RFC关于媒体类型说明

    一.概述 RFC-822   Standard for ARPA Internet text messages [ARPA互连网文本信息标准]RFC-2045 MIME Part 1: Format ...

  5. 微信小程序实现简单的树形图treeview

    H5有很多树形图(树状图)的组件,echarts也有.比如像bootstrap的treeview,定制性很强.不过这些都无法方便地为小程序所用,除非整个页面用H5搭建再用webview框进去,有点粗暴 ...

  6. GIt 修改上一次的提交(保持Change-Id不变即可)

    背景: 代码提交到gerrit以后,发现提交不对或者缺少了某个文件的改动. 解决: 比如发现test.txt 文件忘记修改了 step1. vim test.txt 修改 step2. git add ...

  7. [Java in NetBeans] Lesson 12. Arrays

    这个课程的参考视频和图片来自youtube. 主要学到的知识点有: 1. Array: container that holds a fixed number of values of the sam ...

  8. 服务器--apache启用多个端口的方法

    apache启用多个端口的方法 使用本地ip:端口号,或者修改hosts文件+域名的方法来进行本地多站点web调试. 注意这里是用apache 不是iis 1.安装好AppServ2.5.9软件 官网 ...

  9. python SMTP attachment

    发邮件,现在还有不带附件的吗? 开个玩笑,你要带,就得如此下边这样办 //test.py import smtplib from email.mime.text import MIMEText fro ...

  10. 关于fullpage.js 和animate.css制作全屏简单大方的首页

    附上源码: html <!DOCTYPE html><html lang="en"><head> <meta charset=" ...