input 输入框正则限制只能输入字母,数字,汉字 原理解析以及例子

 

 

原理 : 利用监听键盘抬起的事件,然后事件中过滤一下对应的不符合规定的字符

 

正则表达式教程 : 正则表达式详解[从入门到精通]

<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>

 

  • 13
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值