Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#删除特殊字符_C#_Special Characters - Fatal编程技术网

C#删除特殊字符

C#删除特殊字符,c#,special-characters,C#,Special Characters,我想从字符串中删除所有特殊字符。允许的字符为A-Z(大写或小写)、数字(0-9)、下划线(908;)、空格()、特殊字符(%)或点符号(.) 我试过这个: StringBuilder sb = new StringBuilder(); foreach (char c in input) { if ((c >= '0' && c <= '9') || (c >= 'A' &&

我想从字符串中删除所有特殊字符。允许的字符为A-Z(大写或小写)、数字(0-9)、下划线(908;)、空格()、特殊字符(%)或点符号(.)

我试过这个:

        StringBuilder sb = new StringBuilder();
        foreach (char c in input)
        {
            if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') | c == '.' || c == '_' || c == ' ' || c == '%')
            { sb.Append(c); }
        }
        return sb.ToString();
StringBuilder sb=新建StringBuilder();
foreach(输入中的字符c)
{

如果((c>='0'&&c='A'&&c='A'&&c第一种方法似乎是正确的,只是在
c='.
之前有一个
(按位或)而不是
|


顺便说一句,您应该说明什么不起作用(它不是编译的,还是崩溃的,还是产生错误的输出?

这就是我的版本的外观

StringBuilder sb = new StringBuilder();
foreach (char c in input)
{
    if (Char.IsLetterOrDigit(c) ||
        c == '.' || c == '_' || c == ' ' || c == '%')
        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();
它似乎通过了简单的测试。您可以使用LINQ缩短它

return new string(
    input.Where(
        c => Char.IsLetterOrDigit(c) || 
            c == '.' || c == '_' || c == ' ' || c == '%')
    .ToArray());

将每个字符转换为int,然后将其ascii代码与ascii表进行比较,您可以在互联网上找到:

{
char[]input=txtInput.Text.ToCharArray();
StringBuilder sbResult=新建StringBuilder();
foreach(输入中的字符c)
{
int asciocode=(int)c;
如果(
//空间
asciocode==32
||
//句号(.)
asciocode==46
||
//百分号(%)
Asciocode==37
||
//强调
asciocode==95
||
( //0-9, 
Asciocode>=48
&&asciocode=65
&&asciocode=97
&&ascicode
private字符串移除器eservedcharacters(字符串strValue)
{
char[]ReservedChars={'/',':','*','?','''','''.'};
foreach(保留区中的char strChar)
{
strValue=strValue.Replace(strChar.ToString(),“”);
}
返回标准值;
}

小心使用
Char.IsLetterOrDigit
,因为它考虑了所有Unicode字母和数字。因此
Char.IsLetterOrDigit('Ѝ'))
返回
true
,因为这是西里尔字母表中的一个字母。
IsleterOrdigit
允许所有Unicode字母和数字。例如,用“Ѝ”调用它将返回
true
@Jim:是的,我理解。但是,虽然最初的问题只检查英文字母表字符,但它也没有解决这个问题e国际字符问题。似乎很有可能是
Char.isleterordigit()
将满足OP的要求。这确实是最简单、最合适的解决方案。可接受的解决方案因为其简单。性能不是很好,因为它会为每个替换的字符创建一个新字符串。为什么ReservedChars不是字符串[]那么你就不必每次都调用ToString了。你看过StackOverflow上的线程了吗?这家伙有一个你想要的工作实现。这是一种类型吗?'z')| c=='||“?非常感谢您的回复。所有回复都对我有用。我刚刚意识到我忘了重新发布,这导致了一个问题,那就是它也在删除空白。@Matt Dawdy:我认为这是一个拼写错误,“类型”也是如此:”p@Aasmund艾尔杜塞特——这太有趣了。至少我没有对它无礼!:)
StringBuilder sb = new StringBuilder();
foreach (char c in input)
{
    if (Char.IsLetterOrDigit(c) || c == '.' || c == '_' || c == ' ' || c == '%')
    { sb.Append(c); }
}
return sb.ToString();
return new string(
    input.Where(
        c => Char.IsLetterOrDigit(c) || 
            c == '.' || c == '_' || c == ' ' || c == '%')
    .ToArray());
Regex.Replace(input, "[^a-zA-Z0-9% ._]", string.Empty)
    {
        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();
    }
private string RemoveReservedCharacters(string strValue)
{
    char[] ReservedChars = {'/', ':','*','?','"', '<', '>', '|'};

    foreach (char strChar in ReservedChars)
    {
        strValue = strValue.Replace(strChar.ToString(), "");
    }
    return strValue;
}