用于排除名称字段的特定名称字符串的正则表达式?

时间:2018-07-03 09:49:51

标签: javascript regex

我正在尝试创建一个正则表达式,该名称不带所有名称,但不包括“ test”,“ dummy”,“ percentage”,“ crap”

但是如果我输入'est','ummy'则不会。

作为一个组,它不应该接受,但是当前它排除单个字符。

我尝试了这个:     [^@test]

请要求任何确认

3 个答案:

答案 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]匹配不属于@tes之一的单个字符。

就像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

优点:它使您的代码易于维护。