允许的字符正则表达式 (JavaScript)

dev*_*ebz 5 javascript regex

我正在尝试构建一个允许使用以下字符的正则表达式:

A-Z

a-z

1234567890

!@#$%&*()_-+={[}]|\:;"'<,>.?/~`
Run Code Online (Sandbox Code Playgroud)

所有其他字符均无效。这是我构建的正则表达式,但它没有按我预期的方式工作。我希望 .test() 在存在无效字符时返回 false:

var string = 'abcd^wyd';

function isValidPassword () {
    var regex = /[0-9A-Za-z!@#$%&*()_\-+={[}\]|\:;"'<,>.?\/\\~`]+[0-9A-Za-z!@#$%&*()_\-+={[}\]|\:;"'<,>.?\/\\~`]*/g
    return regex.test(string);
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,即使字符串中存在“^”,测试也始终返回“true”。

Bil*_*oon 3

您的正则表达式仅检查是否至少存在一个允许的字符。将开始和结束锚点添加到正则表达式中 -/^...$/

var string = 'abcd^wyd';

function isValidPassword () {
    var regex = /^[0-9A-Za-z!@#$%&*()_\-+={[}\]|\:;"'<,>.?\/\\~`]+[0-9A-Za-z!@#$%&*()_\-+={[}\]|\:;"'<,>.?\/\\~`]*$/g
    return regex.test(string);
}
Run Code Online (Sandbox Code Playgroud)

...另一种方法是,不是检查所有字符是否良好,而是寻找坏字符,这更有效,因为一旦找到一个字符,您就可以停止查找...

// return true if string does not (`!`) match a character that is not (`^`) in the set...
return !/[^0-9A-Za-z!@#$%&*()_\-+={[}\]|\:;"'<,>.?\/\\~`]/.test()
Run Code Online (Sandbox Code Playgroud)