js前端验证时间,数字

最近,遇到一个平时也最常遇到的输入框输入验证问题,比如验证时间必须为13:00这种格式。折腾整理出来两种用js验证的。
第一种:
<input  class="input-text"  name="endtime" type="text" onkeyup="this.value=this.value.replace(/[^\d\:]/g,'')"

直接采用键盘弹起事件,利用正则表达式替换掉非法的字符,即使输入了,也会立即被替换成空。
第二种
<input  class="input-text"  name="endtime" type="text" onkeydown="checkKeyForTime(this.value,event)"/>
<script type="text/javascript">
function checkKeyForTime(value,e){
	 var isOK = false;  
	    var key = window.event ? e.keyCode : e.which; 
	    if ((key > 95 && key < 106) ||                  //小键盘上的0到9  
	    (key > 47 && key < 60) ||                   //大键盘上的0到9  
	    key==186 || key == 8 || key == 9 || key == 46 || key == 37 || key == 39     //不影响正常编辑键的使用(186:冒号             8:BackSpace;9:Tab;46:Delete;37:Left;39:Right)  
	) {  
	        isOK = true;  
	    } else {  
	        if (window.event) //IE    
	        {  
	            e.returnValue = false;   //event.returnValue=false 效果相同.    
	        }  
	        else //Firefox    
	        {  
	            e.preventDefault();  
	        }  
	    }  
	    return isOK;  
}
</script>

第二种,是直接在其按下按键的时候判断输入的字符的ascii码是否在合法的范围,不在则不让其触发事件,让其无法输入。
问题:第二种方式有个问题,就是在于在不同的输入法状态下,非法字符的ascii码值不是相同的,所以导致上面第二种在某种输入法状态下还是无法过滤非法的字符,所以,最好的方式直接采用正则表达式来过滤替换 :wink:

你可能感兴趣的:(JavaScript,正则表达式)