正则表达式以限制特殊字符

hem*_*mc4 3 javascript regex

我在表单中有一个地址字段,我想限制
* | \ " : < > [ ] { } \ ( ) '' ; @ & $
我尝试过的

var nospecial=/^[^* | \ " : < > [ ] { } ` \ ( ) '' ; @ & $]+$/;
            if(address.match(nospecial)){
                alert('Special characters like * | \ " : < > [ ] { } ` \ ( ) \'\' ; @ & $ are not allowed');
                return false;
Run Code Online (Sandbox Code Playgroud)

但它不起作用。请告诉我我错过了什么?

Ted*_*opp 6

您需要在角色类中转义右括号(以及反斜杠)。您也不需要所有空格:

var nospecial=/^[^*|\":<>[\]{}`\\()';@&$]+$/;
Run Code Online (Sandbox Code Playgroud)

我摆脱了你所有的空间;如果您还想限制空格字符,请再添加一个空格。

编辑 @fab在评论中指出,扭转正则表达式的含义会更有效:

var specials=/[*|\":<>[\]{}`\\()';@&$]/;
Run Code Online (Sandbox Code Playgroud)

并测试是否存在特殊字符(而不是缺少一个特殊字符):

if (specials.test(address)) { /* bad address */ }
Run Code Online (Sandbox Code Playgroud)

  • 另外,一个更好的解决方案是对一个坏字符进行* test *:`if(/[*|and-so-on-on/.test(address))alert('不允许!');` (2认同)