什么是最好的正则表达式而不是这段代码?

时间:2014-03-31 13:28:01

标签: c# regex contains

我的正则表达式是中文。我更喜欢写这段代码。 然而,如果我想用正则表达式替换这个代码,它的最佳正则表达式匹配是什么?

        if (strValue.Contains(",") || strValue.Contains("-") || strValue.Contains("+") || strValue.Contains(".") || strValue.Contains("!") ||                    
                strValue.Contains("@") || strValue.Contains("#") || strValue.Contains("$") || strValue.Contains("%") || strValue.Contains("*") ||                    
                strValue.Contains("(") || strValue.Contains(")") || strValue.Contains("}") || strValue.Contains("{") || strValue.Contains("`") ||
                strValue.Contains("\"") || strValue.Contains("^") || strValue.Contains("&") || strValue.Contains("[") || strValue.Contains("]") ||
                strValue.Contains("=") || strValue.Contains("+") || strValue.Contains("!") || strValue.Contains(";") || strValue.Contains(":") || 
                strValue.Contains("|"))
            {
                return false;
            }    

3 个答案:

答案 0 :(得分:2)

符合您条件的正则表达式将是:

@"[,+.!@#$%*()}{`\\^&[\]=+!;:|-]"

[...]表示一个字符类。 此类中的任何字符都将与输出匹配。

-必须首先或最后(或必须转义),因为正则表达式允许您以[a-z]

的形式指定范围

答案 1 :(得分:0)

怎么样:

^[^,\-\.!@#\$%\(\)\{\}`\\\^&\[\]=!;:|+\*]+$

http://rubular.com/r/EfsarXwG8I

如果你的字符串符合这个正则表达式,那就很好。

这真的不复杂:

`^`            start of string
`[^....]`      match all characters NOT inside this class
`+`            match one of more (use * instead if you want to pass empty strings)
`$`            end of string

方括号(第一个^除外)之间的所有内容都是您要拒绝的字符列表,其中一些需要转义的皱纹(\)因为它们在正则表达式语言中有特殊含义。

编辑:实际上,我可能因为逃避而过度使用它,我认为只有-[]\需要转义,但在这种情况下过于谨慎似乎没什么坏处。

答案 2 :(得分:-2)

嗯,简短的回答是这样的:

Match match = Regex.Match(input, @"[\,\-\+\.\!\@\#\$\%\*\(\)\{\}\`]", RegexOptions.IgnoreCase);
if (match.Success) {
    return false;
}

但是,我几乎可以肯定,选择“任意列表标点符号排除”的方法可能是错误的做法。你只想要允许一组数字,字符和(可能)下划线吗?如果是这样,我会只搜索你想要的字符,而不是你想要你不想要的字符列表。 (如果输入包含印地语字符(例如हिन्दी)会怎样?)您的示例和关联的正则表达式将允许这些字符 - 您可能不希望它们。