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

时间:2016-06-17 17:40:43

标签: javascript regex

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

A-Z

a-z

1234567890

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

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

var string = 'abcd^wyd';

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

在这种情况下,测试总是返回&#34; true&#34;,即使&#34; ^&#34;存在于字符串中。

5 个答案:

答案 0 :(得分:2)

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

var string = 'abcd^wyd';

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

......另一种方法是,不是检查所有字符都是好的,而是寻找一个坏字符,这样更有效率,因为你可以在找到一个字符后立即停止查看......

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

答案 1 :(得分:0)

而不是搜索允许的字符搜索被禁止的字符。

var string = 'abcd^wyd';

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

console.log(regTest(string));

答案 2 :(得分:-1)

正如你所写的那样,正则表达式是检查输入字符串中是否存在字符,无论它出现在何处。

相反,您需要锚定正则表达式,以便检查整个字符串。

通过添加^$,您指示正则表达式仅匹配整个字符串的允许字符,而不是任何子部分。

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

alert(isValidPassword('abcd^wyd'));

答案 3 :(得分:-1)

你的正则表达式匹配o =你的字符串的第一部分,即&#34; abcd&#34;这是真的。你需要将它锚定到开头(在开头使用^)和字符串的结尾(在结尾处使用$),这样你的正则表达式应如下所示:

^[0-9A-Za-z!@#$%&*()_\-+={[}\]|\:;"'<,>.?\/\\~`]+[0-9A-Za-z!@#$%&*()_\-+={[}\]|\:;"'<,>.?\/\\~`]$

这样就需要匹配整个字符串。

您可以通过以下链接对其进行可视化:

regexper_diagram

答案 4 :(得分:-1)

这个正则表达式将起作用。

var str  = 'eefdooasdc23432423!@#$%&*()_-+={[}]|:;"\'<,>.?/~\`';
var reg = /.|\d|!|@|#|\$|%|&|\*|\(|\)|_|-|\+|=|{|\[|}|]|\||:|;|"|'|<|,|>|\.|\?|\/|~|`/gi;

// test it.

reg.test(str); //true

我使用这个网站来测试我的正则表达式。 Regex 101