民间,
我有方法,如果所有字符都是“合法的”,则返回true;如果单个字符是“非法的”,则返回false。定义如下(合法=字母,数字和一些字符,如$, - ,%等)。我想换行和/或回车字符是“非法的”。但是,下面的方法认为它是合法的。我该如何解决?
private static bool NameHasAllLegalCharacters( string name )
{
var regexAlphaNum = new Regex( @"[^a-zA-Z0-9#\$%\^&\*\(\)\._\-\+=\[\]/<>{}:\s]" );
return !regexAlphaNum.IsMatch( name );
}
答案 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}]"
我知道这很难看,但它应该有用。