我正在尝试构建一个允许以下字符的正则表达式:
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;存在于字符串中。
答案 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!@#$%&*()_\-+={[}\]|\:;"'<,>.?\/\\~`]$
这样就需要匹配整个字符串。
您可以通过以下链接对其进行可视化:
答案 4 :(得分:-1)
这个正则表达式将起作用。
var str = 'eefdooasdc23432423!@#$%&*()_-+={[}]|:;"\'<,>.?/~\`';
var reg = /.|\d|!|@|#|\$|%|&|\*|\(|\)|_|-|\+|=|{|\[|}|]|\||:|;|"|'|<|,|>|\.|\?|\/|~|`/gi;
// test it.
reg.test(str); //true
我使用这个网站来测试我的正则表达式。 Regex 101