char[] arr = str.Where(c => !char.IsControl(c)).ToArray();
str = new string(arr);
它更简单,所以我认为它更好!
19
使用System.Linq
string withOutSpecialCharacters = new string(stringWithSpecialCharacters.Where(c =>char.IsLetterOrDigit(c) || char.IsWhiteSpace(c) || c == '-').ToArray());
725
想要快点吗?
public static class StringExtensions
{
public static string ToAlphaNumeric(this string self, params char[] allowedCharacters)
{
return new string(Array.FindAll(self.ToCharArray(), c => char.IsLetterOrDigit(c) || allowedCharacters.Contains(c)));
}
}
这将允许您指定要允许的字符 .
4
正则表达式是 [^\w\s\-]* :
\s 最好使用而不是空格( `` ),因为文本中可能有一个选项卡 .
40
我本可以使用RegEx,它们可以提供优雅的解决方案,但它们可能会导致性能问题 . 这是一个解决方案
char[] arr = str.ToCharArray();
arr = Array.FindAll<char>(arr, (c => (char.IsLetterOrDigit(c)
|| char.IsWhiteSpace(c)
|| c == '-')));
str = new string(arr);
使用紧凑框架(没有FindAll)时
将FindAll替换为1
char[] arr = str.Where(c => (char.IsLetterOrDigit(c) ||
char.IsWhiteSpace(c) ||
c == '-')).ToArray();
str = new string(arr);
12 回答
我做了一个不同的解决方案,通过消除 Control 字符,这是我原来的问题 .
这比列出所有“特殊但好”的字符更好
它更简单,所以我认为它更好!
使用System.Linq
想要快点吗?
这将允许您指定要允许的字符 .
正则表达式是
[^\w\s\-]*
:\s
最好使用而不是空格( `` ),因为文本中可能有一个选项卡 .我本可以使用RegEx,它们可以提供优雅的解决方案,但它们可能会导致性能问题 . 这是一个解决方案
使用紧凑框架(没有FindAll)时
将FindAll替换为1
1 Comment by ShawnFeatherly
我在这里使用其中一个答案的变体 . 我想用“ - ”替换空格,所以它的SEO友好,也做小写 . 也没有从我的服务层引用system.web .
这是一个使用@ata答案作为灵感的扩展方法 .
或者如果你需要除连字符以外的其他字符......
基于这个问题的答案,我创建了一个静态类并添加了这些 . 认为它可能对某些人有用 .
然后这些方法可以用作:
使用Regex有一种更简单的方法 .
这是我正在寻找的非正则表堆分配友好的快速解决方案 .
不安全的版本 .
而对于那些不想使用不安全或不信任字符串长度的黑客 .
用空字符串替换
[^a-zA-Z0-9 -]
.你可以试试:
s
是你的字符串 .