我正在尝试创建一个正则表达式,该名称不带所有名称,但不包括“ test”,“ dummy”,“ percentage”,“ crap”
但是如果我输入'est','ummy'则不会。
作为一个组,它不应该接受,但是当前它排除单个字符。
我尝试了这个:
[^@test]
请要求任何确认
答案 0 :(得分:3)
如果必须使用正则表达式,请从字符串开头使用否定的超前查询:
const validate = str => /^(?!(test|dummy|percentage|crap)$)/.test(str);
console.log(validate('test'));
console.log(validate('est'));
console.log(validate('testt'));
console.log(validate('foo'));
console.log(validate('dumm'));
console.log(validate('dummy'));
如果不这样做,请使用includes
:
const validate = str => !['test', 'dummy', 'percentage', 'crap'].includes(str);
答案 1 :(得分:1)
[^@test]
匹配不属于@
,t
,e
和s
之一的单个字符。
就像Cerbrus所说,正则表达式不是正确的工具。
如果可以依靠IE 11+,则可以使用Set:
const forbidden = new Set([
"test",
"dummy",
"crap"
]);
function shouldAllow(word) {
return forbidden.has(word);
}
否则,您可以使用数组和indexOf
代替:
const forbidden = [
"test",
"dummy",
"crap"
];
function shouldAllow(word) {
return forbidden.indexOf(word) == -1;
}
答案 2 :(得分:0)
为什么不使用regex
来利用JavaScript的array#includes
的功能来编写一个像下面这样的单线Arrow函数(=>
):
excludeList = ['test','dummy','percentage','crap']
isInExcludeList = (testName) => excludeList.includes(testName)
console.log(isInExcludeList('dummy')) //true
console.log(isInExcludeList('dum')) //false
优点:它使您的代码易于维护。