如果至少有一个禁用字符存在,如何使JavaScript的测试返回false?

时间:2017-03-28 06:40:19

标签: javascript regex

如果至少存在以下一个字符,我希望test返回false:^/,:<>!_~@#$%^&()+=?()“|!\[#$-

所以我这样做了:

const pattern = /[^/,:<>!_~@#$%^&()+=?()“|!\[#$-]/
console.log(pattern.test('fff>'))

然而,这会返回true
Codepen

它应该返回false,因为至少有一个禁用字符:<

如何修改正则表达式以反映出来?

5 个答案:

答案 0 :(得分:2)

您应该以{{1​​}}指定开头并以^结尾,并为课程$添加加号

否则,

匹配+,因此返回true。

如果您严格开始和结束,那么它将执行完整的测试。

&#13;
&#13;
fff
&#13;
&#13;
&#13;

答案 1 :(得分:1)

如评论中所述,您可能希望使用否定前瞻:

&#13;
&#13;
const pattern = /(?!.*[/^,:<>!_~@#$%^&()+=?()“|!\[#$-]).+/
console.log(pattern.test('fff>'))
&#13;
&#13;
&#13;

请参阅a demo on regex101.com

答案 2 :(得分:1)

为什么要检查带有否定字符类的禁用字符?

使用常规字符类,事情变得简单。

const forbiddenChars = /[/,:<>!_~@#$%^&()+=?()“|!\[#$-]/;
var success = !inputString.test(forbiddenChars);

答案 3 :(得分:1)

正则表达式模式似乎包含许多非转义特殊字符和重复字符。假设意图是检测任何列出的特殊字符的存在,这应该达到预期的结果:

const pattern = /[\\\/,:<>!_~@#$%\^&()\+=\?"\|\[\]-]/;
console.log( ! pattern.test('fff>');

答案 4 :(得分:1)

我通常会进行测试以检查是否存在特殊字符然后否定它。因此,如果存在特殊应该返回false。 您将需要转义以下字符: 打开/关闭方括号,“[”和“]”;反斜杠“\”;插入符“^”;美元符号“$”;句点或点“。”;垂直条或管道符号“|”;问号“?”;星号“*”;加号/减号“+”/“ - ”;打开/关闭花括号,“{”和“}”;和打开/关闭括号,“(”和“)”

const pattern = /[/,:<>!_~@#\$%\^&\(\)\+=\?"\|!\\\[#$\-\]]/ console.log(!pattern.test('fff>'))

尝试这种模式。记住模式是找到特殊字符,别忘了否定结果。不幸的是我无法测试atm。我正在使用移动设备。如果我做测试,我会稍后编辑。

注意:不确定我是否转义了所有元字符。

注意2 :不确定是否不希望接受“*”,如果不是这种情况,请在正则表达式中添加“*”。把它添加到中间的某个地方

注3 :表达式测试中的双精度似乎与使用我的键盘生成的双引号不同。通常当我使用文字处理器时,我会像你一样得到倾斜的双重报价。如果你想在这里包含正常的报价,它是(“)。如果确实意味着倾斜的报价你也需要关闭倾斜的报价,不幸的是我无法重现它。 注3 - 更新:已编辑正则表达式以测试正常的双引号。

已编辑 - 我测试过它似乎正在运作。 https://codepen.io/anon/pen/RpYdmM?editors=1111 我还没有尝试过所有特殊字符。只有一点。看看