关于c#:字符串字母验证

string letters validation

我对字符串和int.感到困惑,无法验证没有数字和奇怪字符的名称。A-Z和A-Z都很好。我理解"边做边循环"和"哨兵"的用法。我在这里看到了regex,但它在我的代码中不起作用,因为我不知道什么原因。我宁愿选择一个我能理解的简单解决方案。我在代码中验证了int,效果很好,但是验证名称会得到bool和int错误。

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
    static void Main(string[] args)
    {
        int age;
        double mileage;
        string strInput, name;
        bool isValid;

        DisplayApplicationInformation();

        DisplayDivider("Start Program");
        Console.WriteLine();

        DisplayDivider("Get Name");
        strInput = GetInput("your name");
        name = strInput;
        Console.WriteLine("Your name is:" + name);
        Console.WriteLine();

        do
        {
        DisplayDivider("Get Age");
        strInput = GetInput("your age");
        isValid = int.TryParse(strInput, out age);
        if (!isValid || (age <= 0))
        {
            isValid = false;
            Console.WriteLine("'" + strInput +"' is not a valid age entry. Please retry...");
        }
        }while (!isValid);
        Console.WriteLine("Your age is:" + age);
        //age = int.Parse(strInput);
        //Console.WriteLine("Your age is:" + age);
        Console.WriteLine();

        do
        {
        DisplayDivider("Get Mileage");
        strInput = GetInput("gas mileage");
        isValid = double.TryParse(strInput, out mileage);
        if (!isValid || (mileage <= 0))
        {
            isValid = false;
            Console.WriteLine("'" + strInput +"' is not a valid mileage entry. Please retry...");
        }
        } while (!isValid);
        Console.WriteLine("Your age is:" + mileage);
        //mileage = double.Parse(strInput);
        //Console.WriteLine("Your car MPT is:" + mileage);

        TerminateApplication();
    }


尽管我建议您使用一个简单的regex,但您指出您需要一个不同的解决方案。

看看这个问题,第一个答案是regex解决方案,但第二个答案可能会回答您的问题:

1
bool result = input.All(Char.IsLetter);

正如Chris Lively所指出的,如果在名称中允许一个空格,那么可以使用以下命令进行验证:

1
bool result = input.Replace("","").All(Char.IsLetter);


坏小子@chris lively的建议更多的是你想要的一些易读的,而不是regex。

1
2
3
4
5
6
7
8
9
10
11
   bool result = strInput.Replace("","").All(Char.IsLetter);

  if you are wanting to do it the long way with a forloop then look at this example

for (int i = 0; i < strinput.Length; i++)
{
   //if this character isn't a letter and it isn't a Space then return false
   //because it means this isn't a valid alpha string
   if (!(char.IsLetter(strinput[i])) && (!(char.IsWhiteSpace(strinput[i]))))
   return false;
}


这是一款能满足你需求的雷杰克斯。

1
2
3
4
5
6
7
8
9
10
11
12
        Regex reg = new Regex("^[A-Za-z]+$");
        do
        {
            DisplayDivider("Get Name");
            strInput = GetInput("your Name");
            isValid = reg.IsMatch(strInput);
            if (!isValid)
            {
                isValid = false;
                Console.WriteLine("'" + strInput +"' is not a valid name entry. Please retry...");
            }
        } while (!isValid);

基本上,它说,"匹配字符串的开始(^表示开始),只有字母直到字符串的结束($表示字符串的结束),并且必须有一个或多个字母(即+)"

可能是最简单的

现在,假设您不想要"firstname lastname",因为这意味着需要一个空间。如果需要分隔名称的空格,请通知我。