如何使用循环检查字符串中的特殊字符

时间:2013-07-29 05:53:16

标签: c# string loops

因为我的教授不会让我使用RegEx,所以我坚持使用循环来检查字符串上的每个字符。 有没有人有样本代码/算法?

public void setAddress(string strAddress)
{
    do
    {
        foreach (char c in Name)
        {
            if ( /*check for characters*/ == false)
            {
                Address = strAddress;
            }
        }
        if ( /*check for characters*/ == true)
        {
            Console.Write("Invalid!");
        }
    } while ( /*check for characters*/ == true)
}
public int getAddress()
{
    return Address;
}

我只需要包含字母和数字。字符如!@#$%^&不允许。 我不被允许使用RegEx,因为他还没有教过我们......好吧,在他教这些循环和角色检查的那天我无法上课,所以现在他不会告诉我更多。无论如何,如果有一种更有效的方式而不使用RegEx,这将是有帮助的。

4 个答案:

答案 0 :(得分:5)

        string s = @"$KUH% I*$)OFNlkfn$";
        var withoutSpecial = new string(s.Where(c => Char.IsLetterOrDigit(c) 
                                            || Char.IsWhiteSpace(c)).ToArray());

        if (s != withoutSpecial)
        {
            Console.WriteLine("String contains special chars");
        }

你可以完全没有循环:)

来源:https://stackoverflow.com/a/4503614/1714342

编辑:

if(s.Any(c=>c => !Char.IsLetterOrDigit(c) || !Char.IsWhiteSpace(c))
{
    Console.WriteLine("String contains special chars");
}

答案 1 :(得分:2)

你可能根本不需要循环,只需进行字符检查:

if (Name.IndexofAny("!@#$%^&*()".ToCharArray() != -1))
    Console.WriteLine("Valid Address");
else
    Console.WriteLine("Invalid Address");

请参阅http://msdn.microsoft.com/en-us/library/system.string.indexofany.aspx

答案 2 :(得分:0)

具有显式循环的解决方案可以是

  String s = @"$KUH% I*$)OFNlkfn$"; 

  foreach (Char c in s) 
    if (!(Char.IsLetterOrDigit(c) || Char.IsWhiteSpace(c))) {
      Console.WriteLine("String contains special chars");

      break;
    }

答案 3 :(得分:0)

bool check_for_characters(char c)
{
 return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');
}