不匹配确切词的正则表达式

时间:2011-10-14 21:02:42

标签: .net regex

我希望我的注册表能够接受集合中的字符[a-zA-Z0-9。\?!%,],除了确切的单词“未设置”外,也不接受。

成功比赛的例子:

category1
myCategory
Hello World!!!
notset

不成功的比赛示例:

{empty string}
not set
Not Set
NOT SET
<script>

我正在使用.NET框架。

谢谢!

4 个答案:

答案 0 :(得分:9)

显然,您可以通过代码测试“未设置”。如果必须是正则表达式,则可以使用negative lookahead

^(?!not set$)[a-zA-Z0-9.?!%, ]+$

Working Example

C#代码示例如下:

Match m = Regex.Match(s, @"^(?!not set$)[a-zA-Z0-9.?!%, ]+$", RegexOptions.IgnoreCase);
if (m.Success)
{
    // all is well
}

如果您希望匹配不区分大小写(即“未设置”无效,但“未设置”有效),请使用:

Match m = Regex.Match(s, @"^(?!Not Set$)[a-zA-Z0-9.?!%, ]+$");

答案 1 :(得分:2)

这可能有效^(?i:(?!not set)[a-z0-9.\\?!%, ])+$(未经测试)

修改
Didn't work for me. – Bob 4 hours ago

@Bob - 这是你的样本。

成功比赛的例子:

category1
myCategory
Hello World!!!
notset

不成功的比赛示例:

{empty string}
not set
Not Set
NOT SET
<script>

什么不起作用?

@samples = (
 'category1',
 'myCategory',
 'Hello World!!!',
 'notset',
 '',
 'not set',
 'Not Set',
 'NOT SET',
 '<script>'
);

for (@samples) {
   print "'$_'";
   if (/^(?i:(?!not set)[a-z0-9.\\?!%, ])+$/) {
      print " - yes matches\n";
   }
   else {
      print " - no\n";
   }
} 

输出:

'category1' - 是匹配
'myCategory' - 是匹配
'Hello World!!!' - 是匹配
'notset' - 是匹配
'' - 没有 'not set' - 没有 'Not Set' - 没有 'NOT SET' - 没有 '<script>' - 没有

答案 2 :(得分:1)

您可以尝试以下代码:

static void Main(string[] args)
{
    string str = "NOT SET";

    if (str.ToLower().Equals("not set"))
    {
        // Do Something
    }
    else
    {
        String pattern = @"^[a-z0-9.\?!%,]+$";
        Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);

        if (regex.IsMatch(str))
        {
            // Do Something
        }

    }
}

答案 3 :(得分:0)

我最终使用

^(?![nN][oO][tT] [sS][eE][tT]$)[a-zA-Z0-9.?!%, ]+$

在我的.net验证器和不显眼的javascript中使用(?i :)时,我注意到我的客户端验证被禁用了。