帮助修复正则表达式 - \ r \ n未被检测到

时间:2010-10-18 15:04:42

标签: .net regex

民间,

我有方法,如果所有字符都是“合法的”,则返回true;如果单个字符是“非法的”,则返回false。定义如下(合法=字母,数字和一些字符,如$, - ,%等)。我想换行和/或回车字符是“非法的”。但是,下面的方法认为它是合法的。我该如何解决?

  private static bool NameHasAllLegalCharacters( string name )
    {
        var regexAlphaNum = new Regex( @"[^a-zA-Z0-9#\$%\^&\*\(\)\._\-\+=\[\]/<>{}:\s]" );
        return !regexAlphaNum.IsMatch( name );
    }

4 个答案:

答案 0 :(得分:2)

\s匹配所有空格,而不仅仅是ASCII空间。

答案 1 :(得分:1)

\s类匹配所有空格,\r\n被归类为空格。

您的正则表达式需要更具体地说明允许哪种类型的空白。

答案 2 :(得分:1)

鉴于那里有成千上万的角色(感谢Unicode),我甚至不会尝试使用黑名单方法。相反,反转您的逻辑并测试所有字符是否属于您的白名单:

private static bool NameHasAllLegalCharacters( string name )
{
    var regexAlphaNum = new Regex( @"^[a-zA-Z0-9#$%........]*$" );
    return regexAlphaNum.IsMatch( name );
}

答案 3 :(得分:1)

\s匹配此字符集:[\f\n\r\t\v\x85\p{Z}]。您可以简单地枚举此\n\r,如下所示:

@"[^a-zA-Z0-9#\$%\^&\*\(\)\._\-\+=\[\]/<>{}:\f\t\v\x85\p{Z}]"

我知道这很难看,但它应该有用。