RegEx反向实时

时间:2017-10-05 11:55:20

标签: javascript regex

我正在用户输入的字段上执行txt.replace。我想只允许某些字符,并且该功能将在用户输入时实时替换它们。我的代码是

txt.value = txt.value.replace(/^[ A-Za-z0-9_\-.]*$/i, '');

但是那匹配我想要的角色并替换它们而不是我不想要的角色。我尝试使用其他地方建议的相反比赛

txt.value = txt.value.replace(/^(!? A-Za-z0-9_\-.)*$/i, '');

但这似乎仍无效。如何使用该RegEx并将与该公式不匹配的任何内容替换为''

3 个答案:

答案 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事件只会触发一旦

&#13;
&#13;
<input type="text" onkeyup="this.value=this.value.replace(/[^ \w-.]/g, '')" />
&#13;
&#13;
&#13;

https://regex101.com/r/Nv3U1w/2/tests解释正则表达式并包含测试用例。