关于正则表达式:验证字符串是否只包含c#中控制台应用程序中的字母

Verifying that a string contains only letters in console application in c#

本问题已经有最佳答案,请猛点这里访问。

我需要检查我的字符串是否只包含字母而不包含数字。请注意,我知道在StackOverflow上已经发布了很多内容,但是它们都不能帮助我,因为它不使用基本功能!

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

我通过使用regex.ismatch完成了这项工作,但老师告诉我只能使用.NET库中的基本函数,并且严禁使用复杂函数,如排序、搜索字符等。

我的密码

1
2
3
4
5
6
7
8
Console.Write("Enter your name:");

name = Console.ReadLine();
if (Regex.IsMatch(name,"[^A-Za-z_??????????]"))
{
    Console.WriteLine("No name entered!");
    Console.ReadLine();
}

我什么都不知道,怎么用另一种方法。所以如果有人愿意帮助我或给我一个暗示,我会非常高兴。

谢谢您。


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

1
2
3
4
if (name.All(char.IsLetter))
{
    //All characters are letters
}

它是一样的:

1
if (name.All(r => char.IsLetter(r)))


好吧,我看到答案已经被接受了,但它使用了提问者说他不能使用的功能,所以,既然我遇到了构建答案的麻烦,我会把它放在这里,以便得出结论。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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();


不使用任何特殊功能:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    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);
                }
            }
        }
    }


循环字符并检查其ASCII值:

1
2
3
4
5
6
7
8
9
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;
}

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

1
2
3
4
5
6
7
8
9
10
11
12
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;
    }
}