我正在用户输入的字段上执行txt.replace。我想只允许某些字符,并且该功能将在用户输入时实时替换它们。我的代码是
txt.value = txt.value.replace(/^[ A-Za-z0-9_\-.]*$/i, '');
但是那匹配我想要的角色并替换它们而不是我不想要的角色。我尝试使用其他地方建议的相反比赛
txt.value = txt.value.replace(/^(!? A-Za-z0-9_\-.)*$/i, '');
但这似乎仍无效。如何使用该RegEx并将与该公式不匹配的任何内容替换为''
答案 0 :(得分:1)
使用否定字符类
/[^ \w.-]+/
代码:
txt.value = txt.value.replace(/[^ \w.-]+/, '');
\w
匹配字母数字字符和_
(下划线)。
<input type="text" onkeyup="this.value=this.value.replace(/[^ \w.-]/, '')" />
答案 1 :(得分:1)
你必须使用
txt.value = txt.value.replace(/[^ a-z0-9_\-.]+/gi, '');
这将匹配不在字符类中的所有字符[^ A-Za-z0-9 _-。]
注意/ regex / g确保替换所有匹配,而不仅仅是一个
答案 2 :(得分:1)
需要全局标记(g
) ,因为可以按住某个键,生成该角色的多个实例,而keyup
事件只会触发一旦强>
<input type="text" onkeyup="this.value=this.value.replace(/[^ \w-.]/g, '')" />
&#13;
https://regex101.com/r/Nv3U1w/2/tests解释正则表达式并包含测试用例。