如果至少存在以下一个字符,我希望test返回false:^/,:<>!_~@#$%^&()+=?()“|!\[#$-
所以我这样做了:
const pattern = /[^/,:<>!_~@#$%^&()+=?()“|!\[#$-]/
console.log(pattern.test('fff>'))
然而,这会返回true
Codepen
它应该返回false,因为至少有一个禁用字符:<
。
如何修改正则表达式以反映出来?
答案 0 :(得分:2)
您应该以{{1}}指定开头并以^
结尾,并为课程$
添加加号
否则,
匹配+
,因此返回true。
如果您严格开始和结束,那么它将执行完整的测试。
fff
&#13;
答案 1 :(得分:1)
如评论中所述,您可能希望使用否定前瞻:
const pattern = /(?!.*[/^,:<>!_~@#$%^&()+=?()“|!\[#$-]).+/
console.log(pattern.test('fff>'))
&#13;
答案 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 我还没有尝试过所有特殊字符。只有一点。看看