验证字符串是否仅包含c#中控制台应用程序中的字母

时间:2014-01-23 18:38:57

标签: c# regex string console-application

我需要检查我的字符串是否只包含字母而不包含数字。请注意我知道stackoverflow上已经发布了很多,但是没有一个对我有帮助,因为它没有使用基本功能!

这是我的作业,但请帮忙,因为我无法解决问题。

我通过使用Regex.IsMatch完成了这项工作,但是老师告诉我,我只能使用.net库中的基本函数,并且使用复杂的函数,例如 - 排序,搜索字符以及类似的东西是严格禁止的。

我的代码

Console.Write("Enter your name: ");

name = Console.ReadLine();
if (Regex.IsMatch(name, "[^A-Za-z_ŠšČ莞ĆćĐđ]"))
{
    Console.WriteLine("No name entered!");
    Console.ReadLine();
}

我完全没有任何线索,如何以其他方式做到这一点。所以,如果有任何人愿意帮助我或给我一个暗示,生病真的很高兴。

谢谢。

4 个答案:

答案 0 :(得分:2)

使用char.IsLetter检查字符串中的所有字符是否为Letter。

if (name.All(char.IsLetter))
{
    //All characters are letters
}

与:

相同
if (name.All(r => char.IsLetter(r)))

答案 1 :(得分:0)

循环字符并检查它们的ascii值:

public Boolean IsAllLetters(String name)
{
    for (Int32 i = 0; i < name.Length; i++)
    {
        if ((Int32)name[i] < 65 || ((Int32)name[i] > 90 && (Int32)name[i] < 97) || (Int32)name[i] > 122)
            return false;
    }
    return true;
}

我会提供另一种方法。我使用了一对扩展方法来实现这一点,让我可以灵活地查找任何一组字符:

public static class StringEx
{
    public static Boolean ContainsOnly(this String theString, String characters)
    {
        return theString.TrimStart(characters.ToCharArray()).Length == 0;
    }

    public static Boolean ContainsOnly(this String theString, Char[] characters)
    {
        return theString.TrimStart(characters).Length == 0;
    }
}

答案 2 :(得分:0)

不使用任何特殊功能:

    public void RecognizeOnlyLettersInString()
    {
        string name = "test the 123 thing";
        Console.WriteLine(name);

        string letters = "abcdefghijklmnopqrstuvwxyz";
        foreach (char c in name)
        {
            foreach(char letter in letters)
            {
                if (c == letter)
                {
                    break;
                }

                if (letters.IndexOf(letter) == letters.Count() - 1)
                {
                    Console.WriteLine("{0} is not a letter", c);
                }
            }
        }
    }

答案 3 :(得分:0)

好吧,我看到答案已经被接受了,但是它使用了一个提问者说他​​不能使用的功能,所以既然我找到了答案的麻烦,我会把它放在这里为了即将到来得出结论。

Console.WriteLine("Enter your name: ");
string s = Console.ReadLine();
byte[] chars = Encoding.UTF8.GetBytes(s);
bool hasnonletters = false;
for (int x = 0; x < chars.Length; x++)
{
    Console.Write(".");
    int ascii = (int)chars[x];
    if (!((ascii > 64 && ascii < 91) || (ascii > 96 && ascii < 123)))
    {
        hasnonletters = true;
        break;
    }
}

if (hasnonletters)
{
    Console.WriteLine("{0} has Non-letters!", s);
}
else
{
    Console.WriteLine("{0} is all letters!", s);
}

Console.ReadKey();