首页 > 解决方案 > 基本用户输入验证//需要指南

问题描述

上次我在这里问了一些人关于我可以做些什么来验证我的程序中的用户输入。我很高兴有足够多的人有时间在这个领域做新手。作为他们的建议,我被介绍给正则表达式。循环是我的第一个选择,但在某些情况下似乎不起作用。我仍然很难理解正则表达式的工作原理和在线观看教程,也通过在网上遵循解决方案使其对我来说更加复杂。我承认我不擅长。我几乎是在学习 c# 的第一个月,希望有更多关于如何使用正则表达式的初学者方法,因为我只想知道如何利用它来验证用户输入。顺便说一句。

所以这是我今天下午经历的代码,因为我正在尽我最大的努力来了解如何在用户输入错误值时诱捕他们。也是为了防止我的程序崩溃。

有人可以指导如何使用正则表达式正确过滤用户输入吗?网上的解决方案是不具体的。我想过滤姓名(全名)输入以及有效年龄(我可能会尝试询问出生日期并得出年龄值)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;

namespace test_console
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.Write("pls input ur name: ");
            string nametxt = Console.ReadLine();
            string namePattern = @"[A-z]$";
            if (!Regex.IsMatch(nametxt, namePattern))
            {
                Console.WriteLine("invalid name!");
                nametxt = Console.ReadLine();
            }

            while (string.IsNullOrEmpty(nametxt))
            {
                Console.WriteLine("pls input a name!");
                nametxt = Console.ReadLine();
            }

            Console.Write("now input ur age: ");
            int age;
            while (!int.TryParse(Console.ReadLine(), out age))
            { Console.WriteLine("invalid age!"); }

            Console.WriteLine("hi {0}, you are {1} ", nametxt, age);


            Console.ReadKey();
        }

    }
}

标签: c#regex

解决方案


如果您询问正则表达式,则为名称验证模式

 string namePattern = @"[A-z]$";

如果几乎肯定是错的。现在您正在寻找一个以(锚点)结尾的字符串$

 [A-z] - exactly one character in A..z range

如果您查阅Ascii 表A..z范围,您会发现它有

 A,..., Z, [, \, ], ^, _, `, a, ... z

字符(注意,不需要 [],,,\),这就是为什么123[是有效名称(它[which is in valid range结尾)。你,可能想要这样的模式:

 string namePattern = @"^[A-Za-z]+$";

图案:

 ^          - string start
 [A-Za-z]+  - one or many characters, each in A..Z or a..z range
 $          - string end 

因此,整个字符串必须至少包含一个字符,并且所有字符必须A-Z在范围内或a-z范围内


推荐阅读