我正在努力弄清楚为什么这不起作用:
function hasOnlyWhitelistedCharacters(string)
{
var whitelist = RegExp("\\w");
console.log(whitelist.test(string));
return whitelist.test(string);
}
当我运行此字符串时:“wwww ????? * *<><><”
进入此函数,返回true。它不应该归还假吗?事实上,无论我做什么,它似乎都回归真实。
这些也行不通:
var whitelist = RegExp(\w);
var whitelist = /\w/;
答案 0 :(得分:3)
/\w/
匹配字符串中任何位置的单个标识符字符([0-9a-zA-Z_])。要测试整个字符串,请使用anchors(“^”和“$”)和repetition(“+”或“*”,具体取决于您是否允许空字符串)。试试/^\w*$/
或/^\w+$/
,或使用/\W/
测试您不想要的字符串。
function hasOnlyWhitelistedCharacters(string)
{
var whitelist = /^\w*$/;
console.log(whitelist.test(string));
return whitelist.test(string);
}
function hasNoBlacklistedCharacters(string)
{
var blacklist = /\W/;
console.log(blacklist.test(string));
return ! blacklist.test(string);
}
对于更复杂的黑名单字符类,您可以使用complemented class:
function hasOnlyWhitelistedCharacters(string)
{
// match all characters, which must be in the set
var whitelist = /^[\w\s\u00C0-\uDFFF\uF900-\uFFFF]*$/;
console.log(whitelist.test(string));
return whitelist.test(string);
}
function hasNoBlacklistedCharacters(string)
{
// match one character not in the set
var blacklist = /[^\w\s\u00C0-\uDFFF\uF900-\uFFFF]/;
console.log(blacklist.test(string));
return ! blacklist.test(string);
}
使用正则表达式时要小心字符编码。实际上,在任何上下文中都要注意字符编码。关于编码的假设可能导致安全漏洞。
答案 1 :(得分:3)
试试这个:
var whitelist=/^\w*$/;
^
强制它在字符串的开头尝试匹配。 $
强制它匹配结尾。 *
之后的\w
使其匹配\w
的多个实例。
答案 2 :(得分:3)
如果您正在尝试检查目标字符串是否仅包含列入白名单的字符,则需要指定除了它们之外什么都不需要。添加开始和结束标记以及重复以使其正常工作。
^ \ W + $
答案 3 :(得分:2)
要匹配一组列入白名单的字符中的至少一个列入白名单的字符,请尝试以下操作:^\w+$
要匹配一组列入白名单的字符中至少为零的白名单,请尝试以下操作:^\w*$
- 克拉(^)表示模式必须位于字符串的开头,而美元符号($)表示模式必须位于字符串的末尾。通过在^ $中包装您想要搜索的内容,任何未指定的“垃圾”都会强制正则表达式返回false。
回答你的问题:
\\w
应该返回false,因为您正在取消反斜杠并将其转换为普通字符。你实际上正在搜索“反斜杠双-U”
\w
将返回true,因为您正在搜索任何列入白名单的字符
快速谷歌搜索给了我一些网站,你可以测试你的正则表达式(如果你愿意),他们将帮助提供一些反馈:
http://www.myregextester.com/index.php
如果您没有记忆所有内容,我还建议您在制作正则表达式时使用备忘单
答案 4 :(得分:1)
它返回true,因为第一个字符是字符,而你的正则表达式只测试第一个字符是字符。
如果我明白你想要的话,请尝试\w+$
答案 5 :(得分:1)
它返回true,因为wwww?????**<><><
字符串具有白名单字符。您必须在此正则表达式中添加字符串的开头和结尾