在實際開發中,經常需要限制輸入框只能輸入特定字符(如只能輸入數字、字母、漢字、小數等)。雖然後端驗證必不可少,但前端即時攔截能顯著提升用戶體驗。本文整理了多種基於 JavaScript 事件(onkeyup、onkeydown、onbeforepaste 等)的實用方案。
| 需求場景 | 核心代碼 |
|---|---|
| 只能輸入/粘貼漢字 | <input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"> |
| 只能輸入/粘貼數字 | <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')"> |
| 數字校驗(彈窗提示) | <input onkeyup="if(/\D/.test(this.value)){alert('只能輸入數字');this.value='';}"> |
| 只能輸入數字和英文 | <input onkeyup="value=value.replace(/[\W]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"> |
| 只能輸入數字和小數點 | <input onkeyup="value=value.replace(/[^\d{1,}\.\d{1,}|\d{1,}]/g,'')"> |
| 數字和減號(如時間格式) | <input onkeyup="value=value.replace(/[^\w\&=]|_/ig,'')" onblur="value=value.replace(/[^\w\-]|_/ig,'')"> |
<input onkeydown="if(event.keyCode==13)event.keyCode=9">
<input readonly value="只能顯示,不能修改">
<input type="submit" value="提交" hidefocus="true">
<script>
function onlyNum() {
// 數字鍵(48-57)、小鍵盤(96-105)、Backspace(8)
if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)||(event.keyCode==8)))
event.returnValue=false;
}
</script>
<input onkeydown="onlyNum();">
<input name="input" type="text" onkeyup="JHshNumberText(this)" id="title">
<script>
function JHshNumberText(a) {
var fa = "";
if(a.value.substring(0,1)=="-") fa="-"; // 保留負號
var str = (a.value.replace(/[^0-9.]/g,'')).replace(/[.][0-9]*[.]/, '.'); // 過濾非數字/點,合併多個點
if (str.substring(0,1)==".") str="0"+str; // 開頭是點補 0
a.value = fa + str;
}
</script>
<input onkeyup="this.value=this.value.replace(/^(-)*(\d+)\.(\d\d).*$/,'$1$2.$3')">
onkeydown 攔截按鍵(無閃動)+ onkeyup 修正粘貼/拖拽內容 + onbeforepaste 處理粘貼板數據。alert 彈窗阻斷操作,建議靜默修正或提示條展示。