2

因为我的教授不允许我使用 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

4 回答 4

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");
}
于 2013-07-29T05:55:02.147 回答
2

You may not need loops at all, just character checking will do:

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

See http://msdn.microsoft.com/en-us/library/system.string.indexofany.aspx

于 2013-07-29T06:09:06.407 回答
0

A solution with explicit loop could be

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

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

      break;
    }
于 2013-07-29T06:08:27.797 回答
0
bool check_for_characters(char c)
{
 return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');
}
于 2013-07-29T07:08:46.920 回答