\"\"

 

 

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

 

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

<input type=\"text\"  =\"this.value=this.value.replace(/[90]/,\'\')\">

//    其中/[90]/ 表示匹配9或者0
//    这个input 不能接收9或者0的输入
//    {this.value=this.value.replace(/[90]/,\'\'} 的作用是将字符串中遇到的一个9和0替换为\'\'
<input type=\"text\"  =\"this.value=this.value.replace(/[90]/g,\'\')\">

//    这个和上一个的区别是 正则之后加了一个g 意思是所有的9和0替换成\'\'
//    想实验这个效果可以在输入框长按9或者0观察现象
//    也可以将12345012391284023490343400 复制到两个输入框观察现象
<input type=\"text\"  =\"this.value=this.value.replace(/[^(90)]/g,\'\')\">

//    这个和上面两个的区别是只接受9和0 会把另外的元素都替换为\'\' 
//    ^ 是取反的意思

 

 

So ... 知道了原理,就能撸出一些东西来了[手动滑稽]

 

比如 : 


    

    <!-- 只能输入数字 -->
    <!-- 数字正则为[\\d] -->
    <input type=\"text\"  =\"this.value=this.value.replace(/[^\\d]/g,\'\')\" placeholder=\"纯数字\">

    <!-- 只能输入字母 -->
    <!-- 字母正则为[a-zA-Z] -->
    <input type=\"text\"  =\"this.value=this.value.replace(/[^a-zA-Z]/g,\'\')\" placeholder=\"纯字母\">

    <!-- 只能输入数字字母下划线 -->
    <!-- 正则为[\\w] -->
    <input type=\"text\"  =\"this.value=this.value.replace(/[^\\w]/g,\'\')\" placeholder=\"数字字母下划线\">

    <!-- 只能输入汉字 -->
    <!-- [\\u4e00-\\u9fa5] -->
    <input type=\"text\"  =\"this.value=this.value.replace(/[^\\u4e00-\\u9fa5]/g,\'\')\" placeholder=\"汉字\">

    <!-- 只能输入上面所有的 [数字,字母,下划线,或者汉字] -->
    <!-- [\\w\\u4e00-\\u9fa5] -->
    <input type=\"text\"  =\"this.value=this.value.replace(/[^\\w\\u4e00-\\u9fa5]/g,\'\')\" placeholder=\"数字,字母,下划线,或者汉字\">

 

当然 可以让 指向一个function 做更深层次的操作

 

- 拼接FUCK例子


   

    <!-- 拼接FUCK例子 -->
    <input type=\"text\"  =\"this.value=fuckText(this.value)\" placeholder=\"FuckRedWolfChao\">

   < >
       function fuckText(value){
            //    [代码水平不咋地,只是个例子]...
            //    当你输入RedWolfChao的时候拼接FUCK
            if(value == \"RedWolfChao\"){
                return \"FUCK : \" + value;
            }
            return value;
        }
    </ >

 

- 正则校验合法金钱例子


    

    <!-- 正则校验合法金钱例子 -->

    <input type=\"text\"  =\"this.value=fuckMoney(this.value)\" placeholder=\"fuckMoney\">

    < >
        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;
        }
    </ >

 

最后转载一个同道写好的正则匹配[我还是推荐自己写,可以写好之后和他的对比一下有什么不同]

 

可以直接去该网站看,也可以往下翻 [代码后面还有...还得继续往下翻]

直达链接
 

输入大小写字母、数字、下划线:

<input type=\"text\"  =\"this.value=this.value.replace(/[^\\w_]/g,\'\');\">

输入小写字母、数字、下划线:

<input type=\"text\"  =\"this.value=this.value.replace(/[^a-z0-9_]/g,\'\');\">

输入数字和点

<input type=\"text\"  =\"value=value.replace(/[^\\d.]/g,\'\')\">

输入中文:   

<input type=\"text\"  =\"this.value=this.value.replace(/[^\\u4e00-\\u9fa5]/g,\'\')\">  
  
输入数字:   

<input type=\"text\"  =\"this.value=this.value.replace(/\\D/g,\'\')\">  

输入英文:   

<input type=\"text\"  =\"this.value=this.value.replace(/[^a-zA-Z]/g,\'\')\">  
  
输入中文、数字、英文:   

<input  =\"value=value.replace(/[^\\w\\u4E00-\\u9FA5]/g, \'\')\">  
 
输入数字和字母:

<input  =\"value=value.replace(/[\\W]/g,\'\')\">  

除了英文的标点符号以外,其他的都可以中文,英文字母,数字,中文标点

<input type=\"text\"  =\"this.value=this.value.replace(/^[^!@#$%^&*()-=+]/g,\'\')\">

只能输入数字代码(小数点也不能输入)

<input  =\"this.value=this.value.replace(/\\D/g,\'\')\" onafterpaste=\"this.value=this.value.replace(/\\D/g,\'\')\">

只能输入数字,能输小数点.

<input  =\"if(isNaN(value))execCommand(\'undo\')\" onafterpaste=\"if(isNaN(value))execCommand(\'undo\')\">

<input name=txt1  =\"if(/\\D/.test(this.value)){alert(\'只能输入数字\');this.value=\'\';}\">

数字和小数点方法二

<input type=text t_value=\"\" o_value=\"\"  =\"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\"  =\"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\"  =\"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  =\"value=value.replace(/[\\d]/g,\'\') \" =\"clipboardData.setData(\'text\',clipboardData.getData(\'text\').replace(/[\\d]/g,\'\'))\" maxlength=10 name=\"Numbers\">

只能输入英文字母和数字,不能输入中文

<input  =\"value=value.replace(/[^\\w\\.\\/]/ig,\'\')\">

只能输入数字和英文

<input  =\"value=value.replace(/[^\\d|chun]/g,\'\')\">

小数点后只能有最多两位(数字,中文都可输入),不能输入字母和运算符号:

<input  =\"if((event.keyCode<48 || event.keyCode>57) && event.keyCode!=46 || /\\.\\d\\d$/.test(value))event.returnValue=false\">

小数点后只能有最多两位(数字,字母,中文都可输入),可以输入运算符号:

<input  =\"this.value=this.value.replace(/^(\\-)*(\\d+)\\.(\\d\\d).*$/,\'$1$2.$3\')\">

 

前方高能!

前方高能!!

前方高能!!!

这种正则方式拦截不住输入法Enter输入

\"\"\"\"

 

原因 : 第三方输入法拦截了Enter的事件,浏览器监听不到...

解决方式 : 将 改为onInput即可...

实验证明 : oninput体验比 更舒适

 

    <!-- oninput 事件在用户输入时触发。-->
    <!-- 该事件在 或 元素的值发生改变时触发。-->
    <!-- 提示: 该事件类似于   事件。不同之处在于 oninput 事件在元素值发生变化是立即触发,   在元素失去焦点时触发。另外一点不同是   事件也可以作用于 和 元素。-->

    <!-- 只能输入数字 -->
    <!-- 数字正则为[\\d] -->
    <input type=\"text\" oninput=\"this.value=this.value.replace(/[^\\d]/g,\'\')\" placeholder=\"纯数字\">

 

最终代码 长这样 : 

 

<!DOCTYPE html>
<html>
<  charset=\"UTF-8\"> 

<  http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />
<head>
	< >Input</ >
</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\">
	< >
		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;
		}
	</ >
</body>
</html>

 

收藏 打印