原理 : 利用监听键盘抬起的事件,然后事件中过滤一下对应的不符合规定的字符
正则表达式教程 : 正则表达式详解[从入门到精通]
<input type="text" onkeyup="this.value=this.value.replace(/[90]/,'')">
// 其中/[90]/ 表示匹配9或者0
// 这个input 不能接收9或者0的输入
// {this.value=this.value.replace(/[90]/,''} 的作用是将字符串中遇到的一个9和0替换为''
<input type="text" onkeyup="this.value=this.value.replace(/[90]/g,'')">
// 这个和上一个的区别是 正则之后加了一个g 意思是所有的9和0替换成''
// 想实验这个效果可以在输入框长按9或者0观察现象
// 也可以将12345012391284023490343400 复制到两个输入框观察现象
<input type="text" onkeyup="this.value=this.value.replace(/[^(90)]/g,'')">
// 这个和上面两个的区别是只接受9和0 会把另外的元素都替换为''
// ^ 是取反的意思
So ... 知道了原理,就能撸出一些东西来了[手动滑稽]
比如 :
<!-- 只能输入数字 -->
<!-- 数字正则为[\d] -->
<input type="text" onkeyup="this.value=this.value.replace(/[^\d]/g,'')" placeholder="纯数字">
<!-- 只能输入字母 -->
<!-- 字母正则为[a-zA-Z] -->
<input type="text" onkeyup="this.value=this.value.replace(/[^a-zA-Z]/g,'')" placeholder="纯字母">
<!-- 只能输入数字字母下划线 -->
<!-- 正则为[\w] -->
<input type="text" onkeyup="this.value=this.value.replace(/[^\w]/g,'')" placeholder="数字字母下划线">
<!-- 只能输入汉字 -->
<!-- [\u4e00-\u9fa5] -->
<input type="text" onkeyup="this.value=this.value.replace(/[^\u4e00-\u9fa5]/g,'')" placeholder="汉字">
<!-- 只能输入上面所有的 [数字,字母,下划线,或者汉字] -->
<!-- [\w\u4e00-\u9fa5] -->
<input type="text" onkeyup="this.value=this.value.replace(/[^\w\u4e00-\u9fa5]/g,'')" placeholder="数字,字母,下划线,或者汉字">
当然 可以让onkeyup指向一个function 做更深层次的操作
- 拼接FUCK例子
<!-- 拼接FUCK例子 -->
<input type="text" onkeyup="this.value=fuckText(this.value)" placeholder="FuckRedWolfChao">
<script>
function fuckText(value){
// [代码水平不咋地,只是个例子]...
// 当你输入RedWolfChao的时候拼接FUCK
if(value == "RedWolfChao"){
return "FUCK : " + value;
}
return value;
}
</script>
- 正则校验合法金钱例子
<!-- 正则校验合法金钱例子 -->
<input type="text" onkeyup="this.value=fuckMoney(this.value)" placeholder="fuckMoney">
<script>
function fuckMoney(value){
// [代码水平不咋地,只是个例子]
// input 正则校验合法金钱数目
// 1. 不能以0开头
// 2. 不能以小数点开头
// 3. 只能同时存在一个小数点
// 然后就写逻辑呗
// 正则控制只能输入数字和小数点
var temp = value.replace(/[^\d\.]/g,'');
// 然后判断第一位是不是0或者小数点 如果是 就return ''
var zeroIndex = temp.indexOf('0');
if (zeroIndex==0) {
return'';
}
var pointIndex = temp.indexOf('.');
if (pointIndex==0) {
return '';
}else if (pointIndex!=-1) {
// 正则判断 包含几个小数点
var reg = /\./g;
var pointNum = temp.match(reg).length;
// 如果有两个 则处理一下 否则就干掉了
if(pointNum==2){
// 如果第二个小数点是最后一个,则干掉它,否则清空Input
var lastPointIndex = temp.lastIndexOf('.');
if (lastPointIndex+1 == temp.length) {
return temp.substring(0,temp.length-1);
}
}else if(pointNum ==1 ){
return temp;
}else{
return '';
}
}
return temp;
}
</script>
最后转载一个同道写好的正则匹配[我还是推荐自己写,可以写好之后和他的对比一下有什么不同]
可以直接去该网站看,也可以往下翻 [代码后面还有...还得继续往下翻]
输入大小写字母、数字、下划线:
<input type="text" onkeyup="this.value=this.value.replace(/[^\w_]/g,'');">
输入小写字母、数字、下划线:
<input type="text" onkeyup="this.value=this.value.replace(/[^a-z0-9_]/g,'');">
输入数字和点
<input type="text" onkeyup="value=value.replace(/[^\d.]/g,'')">
输入中文:
<input type="text" onkeyup="this.value=this.value.replace(/[^\u4e00-\u9fa5]/g,'')">
输入数字:
<input type="text" onkeyup="this.value=this.value.replace(/\D/g,'')">
输入英文:
<input type="text" onkeyup="this.value=this.value.replace(/[^a-zA-Z]/g,'')">
输入中文、数字、英文:
<input onkeyup="value=value.replace(/[^\w\u4E00-\u9FA5]/g, '')">
输入数字和字母:
<input onKeyUp="value=value.replace(/[\W]/g,'')">
除了英文的标点符号以外,其他的都可以中文,英文字母,数字,中文标点
<input type="text" onkeyup="this.value=this.value.replace(/^[^!@#$%^&*()-=+]/g,'')">
只能输入数字代码(小数点也不能输入)
<input onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')">
只能输入数字,能输小数点.
<input onkeyup="if(isNaN(value))execCommand('undo')" onafterpaste="if(isNaN(value))execCommand('undo')">
<input name=txt1 onchange="if(/\D/.test(this.value)){alert('只能输入数字');this.value='';}">
数字和小数点方法二
<input type=text t_value="" o_value="" onkeypress="if(!this.value.match(/^[\+\-]?\d*?\.?\d*?$/))this.value=this.t_value;else this.t_value=this.value;if(this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?)?$/))this.o_value=this.value" onkeyup="if(!this.value.match(/^[\+\-]?\d*?\.?\d*?$/))this.value=this.t_value;else this.t_value=this.value;if(this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?)?$/))this.o_value=this.value" onblur="if(!this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?|\.\d*?)?$/))this.value=this.o_value;else{if(this.value.match(/^\.\d+$/))this.value=0+this.value;if(this.value.match(/^\.$/))this.value=0;this.o_value=this.value}">
只能输入字母和汉字
<input onkeyup="value=value.replace(/[\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[\d]/g,''))" maxlength=10 name="Numbers">
只能输入英文字母和数字,不能输入中文
<input onkeyup="value=value.replace(/[^\w\.\/]/ig,'')">
只能输入数字和英文
<input onKeyUp="value=value.replace(/[^\d|chun]/g,'')">
小数点后只能有最多两位(数字,中文都可输入),不能输入字母和运算符号:
<input onKeyPress="if((event.keyCode<48 || event.keyCode>57) && event.keyCode!=46 || /\.\d\d$/.test(value))event.returnValue=false">
小数点后只能有最多两位(数字,字母,中文都可输入),可以输入运算符号:
<input onkeyup="this.value=this.value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')">
前方高能!
前方高能!!
前方高能!!!
这种正则方式拦截不住输入法Enter输入
原因 : 第三方输入法拦截了Enter的事件,浏览器监听不到...
解决方式 : 将onkeyup改为onInput即可...
实验证明 : oninput体验比onkeyup更舒适
<!-- oninput 事件在用户输入时触发。-->
<!-- 该事件在 或 元素的值发生改变时触发。-->
<!-- 提示: 该事件类似于 onchange 事件。不同之处在于 oninput 事件在元素值发生变化是立即触发, onchange 在元素失去焦点时触发。另外一点不同是 onchange 事件也可以作用于 和 元素。-->
<!-- 只能输入数字 -->
<!-- 数字正则为[\d] -->
<input type="text" oninput="this.value=this.value.replace(/[^\d]/g,'')" placeholder="纯数字">
最终代码 长这样 :
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<head>
<title>Input</title>
</head>
<body>
<!-- 只能输入数字 -->
<!-- 数字正则为[\d] -->
<input type="text" oninput="this.value=this.value.replace(/[^\d]/g,'')" placeholder="纯数字">
<!-- 只能输入字母 -->
<!-- 字母正则为[a-zA-Z] -->
<input type="text" oninput="this.value=this.value.replace(/[^a-zA-Z]/g,'')" placeholder="纯字母">
<!-- 只能输入数字字母下划线 -->
<!-- 正则为[\w] -->
<input type="text" oninput="this.value=this.value.replace(/[^\w]/g,'')" placeholder="数字字母下划线">
<!-- 只能输入汉字 -->
<!-- [\u4e00-\u9fa5] -->
<input type="text" oninput="this.value=this.value.replace(/[^\u4e00-\u9fa5]/g,'')" placeholder="汉字">
<!-- 只能输入上面所有的 [数字,字母,下划线,或者汉字] -->
<!-- [\w\u4e00-\u9fa5] -->
<input type="text" oninput="this.value=this.value.replace(/[^\w\u4e00-\u9fa5]/g,'')" placeholder="数字,字母,下划线,或者汉字">
<!-- 拼接FUCK例子 -->
<input type="text" oninput="this.value=fuckText(this.value)" placeholder="FuckRedWolfChao">
<!-- 正则校验合法金钱例子 -->
<input type="text" oninput="this.value=fuckMoney(this.value)" placeholder="fuckMoney">
<script>
function fuckText(value){
// 只是个例子...
// 当你输入RedWolfChao的时候拼接FUCK
if(value == "RedWolfChao"){
return "FUCK : " + value;
}
return value;
}
function fuckMoney(value){
// input 正则校验合法金钱数目
// 1. 不能以0开头
// 2. 不能以小数点开头
// 3. 只能同时存在一个小数点
// 然后就写逻辑呗
// 正则控制只能输入数字和小数点
var temp = value.replace(/[^\d\.]/g,'');
// 然后判断第一位是不是0或者小数点 如果是 就return ''
var zeroIndex = temp.indexOf('0');
if (zeroIndex==0) {
return'';
}
var pointIndex = temp.indexOf('.');
if (pointIndex==0) {
return '';
}else if (pointIndex!=-1) {
// 正则判断 包含几个小数点
var reg = /\./g;
var pointNum = temp.match(reg).length;
// 如果有两个 则处理一下 否则就干掉了
if(pointNum==2){
// 如果第二个小数点是最后一个,则干掉它,否则清空Input
var lastPointIndex = temp.lastIndexOf('.');
if (lastPointIndex+1 == temp.length) {
return temp.substring(0,temp.length-1);
}
}else if(pointNum ==1 ){
return temp;
}else{
return '';
}
}
return temp;
}
</script>
</body>
</html>