C# Remove special characters

后端 未结 7 2327
孤街浪徒
孤街浪徒 2021-02-07 08:08

I want to remove all special characters from a string. Allowed characters are A-Z (uppercase or lowercase), numbers (0-9), underscore (_), white space ( ), pecentage(%) or the d

相关标签:
7条回答
  • 2021-02-07 08:41

    You can simplify the first method to

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

    which seems to pass simple tests. You can shorten it using LINQ

    return new string(
        input.Where(
            c => Char.IsLetterOrDigit(c) || 
                c == '.' || c == '_' || c == ' ' || c == '%')
        .ToArray());
    
    0 讨论(0)
  • 2021-02-07 08:46
    Regex.Replace(input, "[^a-zA-Z0-9% ._]", string.Empty)
    
    0 讨论(0)
  • 2021-02-07 08:50

    Cast each char to an int, then compare its ascii code to the ascii table, which you can find all over the internet: 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
                    )
                    ||
                    ( //A-Z
                        asciiCode >= 65
                        && asciiCode <= 90
                    )
                    ||
                    ( //a-z
                        asciiCode >= 97
                        && asciiCode <= 122
                    )
                )
                {
                    sbResult.Append(c);
                }
            }
    
            txtResult.Text = sbResult.ToString();
        }
    
    0 讨论(0)
  • 2021-02-07 08:54

    The first approach seems correct, except that you have a | (bitwise OR) instead of a || before c == '.'.

    By the way, you should state what doesn't work (doesn't it compile, or does it crash, or does it produce wrong output?)

    0 讨论(0)
  • 2021-02-07 08:57
    private string RemoveReservedCharacters(string strValue)
    {
        char[] ReservedChars = {'/', ':','*','?','"', '<', '>', '|'};
    
        foreach (char strChar in ReservedChars)
        {
            strValue = strValue.Replace(strChar.ToString(), "");
        }
        return strValue;
    }
    
    0 讨论(0)
  • 2021-02-07 09:05
    StringBuilder sb = new StringBuilder();
    foreach (char c in input)
    {
        if (char.IsLetterOrDigit(c) || "_ %.".Contains(c.ToString()))
            sb.Append(c);
    }
    return sb.ToString();
    
    0 讨论(0)
提交回复
热议问题