C#删除特殊字符

我想从字符串中删除所有特殊字符。 允许的字符是AZ(大写或小写),数字(0-9),下划线(_),空格(),百分比(%)或点符号(。)。

我试过这个:

StringBuilder sb = new StringBuilder(); foreach (char c in input) { if ((c >= '0' && c = 'A' && c = 'a' && c <= 'z') | c == '.' || c == '_' || c == ' ' || c == '%') { sb.Append(c); } } return sb.ToString(); 

还有这个:

  Regex r = new Regex("(?:[^a-z0-9% ]|(?<=['\"])s)", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled); return r.Replace(input, String.Empty); 

但似乎没有任何效果。 任何帮助将不胜感激。

谢谢!

您可以简化第一种方法

 StringBuilder sb = new StringBuilder(); foreach (char c in input) { if (Char.IsLetterOrDigit(c) || c == '.' || c == '_' || c == ' ' || c == '%') { sb.Append(c); } } return sb.ToString(); 

这似乎通过了简单的测试。 您可以使用LINQ缩短它

 return new string( input.Where( c => Char.IsLetterOrDigit(c) || c == '.' || c == '_' || c == ' ' || c == '%') .ToArray()); 
 Regex.Replace(input, "[^a-zA-Z0-9% ._]", string.Empty) 

第一种方法似乎是正确的,除了你有一个| (按位OR)而不是|| 之前c == '.'

顺便说一下,你应该说明哪些不起作用(它不编译,还是崩溃,还是产生错误的输出?)

 StringBuilder sb = new StringBuilder(); foreach (char c in input) { if (char.IsLetterOrDigit(c) || "_ %.".Contains(c.ToString())) sb.Append(c); } return sb.ToString(); 

这就是我的版本看起来的样子。

 StringBuilder sb = new StringBuilder(); foreach (char c in input) { if (Char.IsLetterOrDigit(c) || c == '.' || c == '_' || c == ' ' || c == '%') sb.Append(c); } } return sb.ToString(); 

将每个char转换为int,然后将其ascii代码与ascii表进行比较,您可以在互联网上找到它: http : //www.asciitable.com/

  { char[] input = txtInput.Text.ToCharArray(); StringBuilder sbResult = new StringBuilder(); foreach (char c in input) { int asciiCode = (int)c; if ( //Space asciiCode == 32 || // Period (.) asciiCode == 46 || // Percentage Sign (%) asciiCode == 37 || // Underscore asciiCode == 95 || ( //0-9, asciiCode >= 48 && asciiCode <= 57 ) || ( //AZ asciiCode >= 65 && asciiCode <= 90 ) || ( //az asciiCode >= 97 && asciiCode <= 122 ) ) { sbResult.Append(c); } } txtResult.Text = sbResult.ToString(); } 
 private string RemoveReservedCharacters(string strValue) { char[] ReservedChars = {'/', ':','*','?','"', '<', '>', '|'}; foreach (char strChar in ReservedChars) { strValue = strValue.Replace(strChar.ToString(), ""); } return strValue; }