限制输入框仅可输入0-10个英文字母的正则不生效如何解决
问题根因
- 你当前的正则虽然定义了
{0,10}的长度规则,但调用test()校验时传入的是当前单次按键输入的单个字符,每次校验的内容长度最多为1,永远不可能触发长度超限的校验逻辑,所以超过10个字符时不会报错。 keypress事件触发时,新输入的字符还没写入输入框的value属性,需要先获取已输入的内容长度,再加1才是输入完成后的总长度。
修复代码
调整校验逻辑,分别校验字符类型和总长度即可,修改后代码如下:
$(document).ready(function() { $("#name").keypress(function (e) { var keyCode = e.keyCode || e.which; $("#nameError").html(""); // 仅校验单个字符是否为英文字母的正则 var charRegex = /^[A-Za-z]$/; // 获取输入框已有的内容 var currentValue = $(this).val(); // 先校验输入字符是否合法 var isCharValid = charRegex.test(String.fromCharCode(keyCode)); if (!isCharValid) { $("#nameError").html("仅允许输入英文字母,长度范围为0-10"); return false; } // 再校验输入后的总长度是否超过上限 if (currentValue.length + 1 > 10) { $("#nameError").html("仅允许输入英文字母,长度范围为0-10"); return false; } return true; }); });
优化建议
可以额外增加input或者blur事件的兜底校验,避免用户通过粘贴、拖拽等方式绕过keypress的输入限制。
内容的提问来源于stack exchange,提问作者Abhishek Aggarwal
相关产品推荐
相关产品推荐

