JS中含\b的字母正则导致退格键无法正常工作的原因
问题原因及解决办法
为什么退格键被过滤?
核心问题是你搞混了退格键的e.key值和正则里\b的含义:
- 按退格键触发
keydown事件时,e.key返回的是字符串"Backspace",不是你以为的转义字符\b。 - 正则里的
\b在字符集[]中代表的是ASCII编码的退格字符(对应字符值0x08),但这和e.key返回的"Backspace"完全不匹配,所以退格键过不了正则校验,被e.preventDefault()直接阻止了。
修正方案
你可以直接单独判断e.key是否为"Backspace",修改后的代码如下:
$('#field').keydown(function(e) { // 只允许字母和退格键输入 if (!/^[A-Za-z]$/i.test(e.key) && e.key !== "Backspace") { e.preventDefault(); } });
如果需要兼容旧版浏览器,也可以加入keyCode判断(退格键的keyCode是8):
$('#field').keydown(function(e) { const isLetter = /^[A-Za-z]$/i.test(e.key); const isBackspace = e.key === "Backspace" || e.keyCode === 8; if (!isLetter && !isBackspace) { e.preventDefault(); } });
内容的提问来源于stack exchange,提问作者gene b.
相关产品推荐
相关产品推荐

