如何从字符串中删除除破折号和空格字符外的所有非字母数字字符?


当前回答

如果你用JS工作,这里有一个非常简洁的版本

myString = myString.replace(/[^A-Za-z0-9 -]/g, "");

其他回答

我做了一个不同的解决方案,通过消除控制字符,这是我最初的问题。

这比列出所有“特别但不错”的字符要好得多

char[] arr = str.Where(c => !char.IsControl(c)).ToArray();    
str = new string(arr);

它更简单,所以我认为它更好!

你可以试试:

string s1 = Regex.Replace(s, "[^A-Za-z0-9 -]", "");

s是你的弦。

我本可以使用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);

1 ShawnFeatherly的评论

使用Regex有一个更简单的方法。

private string FixString(string str)
{
    return string.IsNullOrEmpty(str) ? str : Regex.Replace(str, "[\\D]", "");
}

使用系统。Linq

string withOutSpecialCharacters = new string(stringWithSpecialCharacters.Where(c =>char.IsLetterOrDigit(c) || char.IsWhiteSpace(c) || c == '-').ToArray());