javascript - 正则表达式验证不允许 home、end、箭头键工作

标签 javascript regex validation

问题:我有一个 html 文本输入,它在 onpressonkeydownonkeyup 事件中使用以下代码:

this.value = this.value.replace(/[^a-zA-Z0-9]/, '')

这适用于字母数字验证,但它不允许使用主页键、结束键或箭头键放置光标;只能使用退格键移动光标。老实说,这在某些情况下是可取的行为,但在其他情况下则不然。

为什么在 Firefox 和 Chrome 中会出现这种行为(尚未在 IE 中测试过)?我的问题是它与将光标放在末尾的 this.value = 部分有关,因为我从未见过箭头键等的正则表达式。

最佳答案

由于您在每次击键时替换全部内容(实际上,每次击键 3 次),插入符号将放在替换后的末尾。

我建议另一种方法:仅在验证未通过时才替换字段的内容:

<input id="uname" type="text">
var f = document.getElementById('uname');
f.addEventListener('keyup', function(e){
    var regex = /[^a-zA-Z0-9]/;
    if(regex.test(this.value)) {
        this.value = this.value.replace(regex, '')  
    }
});

上面的 JavaScript 片段应该添加到 <script> 中在 </body> 之前标记(或包装在 document.ready/DOMContentLoaded/window.onload 处理程序中以确保该字段在运行时已经存在)。

Demo

关于javascript - 正则表达式验证不允许 home、end、箭头键工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15510478/

相关文章:

html - 输入类型日期最小值和最大值根据 yyyy-mm-dd 而不是 dd-mm-yyyy 进行验证

c# - 在单个 WPF 控件中列出所有 Validation.Errors?

javascript - Jquery UI 自动完成工作正常但得到空白结果

javascript - 在 HTML : Uncaught TypeError: data. forEach 中使用 JSON 文件不是函数

javascript - 嵌入 iframe 不返回响应式设计?

Python 正则表达式 - 识别列表中的第一项和最后一项

javascript - 如何修改此方法以返回具有键 => 值的数组?

php - 分离数值方程

r - 基于同一数据框中列名部分匹配的子集列

java - 是否可以在基于 Spring 的控制台应用程序中使用 @Valid 注释?