允许在某些情况下在正则表达式中拾取的单词

时间:2018-06-19 10:19:32

标签: regex

我有一个正则表达式来寻找只是将“N / A”或类似内容粘贴到表单字段中的人。

^(?!(\b(N/A|NA|n/a|na|Yes|yes|YES|No|no|NO)\b))

我肯定不是最优雅的。然而,我不能为我的生活得到它允许上面的话,如果后面的东西。

因此,如果有人只是键入“是”,那么我希望它不通过正则表达式检查。但如果有人输入“是的,我就等等等等”,我希望它能够通过。

我所使用的表达式允许使用该单词,只要它不是句子中的第一个单词即可。我只是想禁止列出的单词作为该领域的唯一单词。

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:2)

您可以删除第一个\b(它在字符串的开头和单词char之间是多余的),并用$(字符串结尾)替换第二个{

^(?!(?:N/A|NA|n/a|na|Yes|yes|YES|No|no|NO)$)

请参阅regex demo

使用不区分大小写的选项,您可以将模式缩小为

^(?!(?:n/?a|yes|no)$)

请参阅another regex demo

<强>详情

  • ^ - 开始字符串,然后......
  • (?!(?:n/?a|yes|no)$) - 字符串中未紧跟n/?anan/a),yesno的位置跟着字符串的结尾。

在人类的话说,如果整个字符串不等于交替组内的替代字符,则只匹配字符串的开头。

答案 1 :(得分:0)

最简单的方法是精确匹配所有禁用字符串并反转结果。

使用不区分大小写的选项尝试^(n/?a|yes|no)$并反转结果。 ^匹配字符串的开头。 $匹配字符串的结尾。

如果您没有不区分大小写的选项,请使用^([nN]/?[aA]|[yY][eE][sS]|[nN][oO])$