zoukankan      html  css  js  c++  java
  • 控制台输入验证

    VS提供了一个模版“控制台应用程序”,这种应用程序主要不是用来与用户交互的,或做一些后台程序运行的展示,或用来练习C#语法,如果当做C#语法学习的平台,在这里就说一下在控制台下的输入验证吧。

    控制台状态下,程序的输入输出是流的方式进行的,也就是光标是向前的(如果不做特殊处理的话),输入的验证,只能等用户输入完后,系统从缓冲区中把数据读出来进行验证(因为在这里没有按键事件)。举个例子吧,比如,我们提示用户从控制台上输入一个数字类型(如果是字符或字符串类型,问题就会少一点,因为Console.ReadLine Console.Read方法,是返回字符串和字符的),拿年龄来说明问题吧。

    最直接的验证是这样的:

                Console.WriteLine("请输入年龄:");

                string agestr = Console.ReadLine();

                int age;

                if (int.TryParse(agestr, out age))

                {

                    Console.WriteLine("你输入的年龄:", age);

                }

                else

                {

                    Console.WriteLine("你输入的年龄有误!");

                }

    我们利用类型.TryParse方法,来试图去转换一个类型,int.TryParse是试图把字符串转换成整型,当然,这个字符串必需是数字的字符串,这样才能转换成功,否则是不成功的,返回值是为false的,所以利用这点,就可以验证用户输入的年龄类型正确与否。其实上面写法还是复杂一点,于是就要简化一下,如下代码:

               Console.WriteLine("请输入年龄:");

                string agestr = Console.ReadLine();

                int age = int.TryParse(agestr, out age) ? age : 1;

                Console.WriteLine("年龄为:{0}", age);

    用三元运算符可以在一定程度减少了代码量,但与之前不一样的是,在这里如果用户输入年龄有误,就会给一个默认值。

    上面这两种做法都还行,能起一定的效果,但最大的依赖是TryParse,这样在业务逻辑上有一点别扭,是通过一个方法来验证类型的。

    其实用更好的办法,如下:

                Regex reg = new Regex(@"^\d+$");//重复一次或多次

                Console.WriteLine("请输入年龄:");

                string agestr = Console.ReadLine();

                if (reg.Match(agestr).Success)

                {

                    Console.WriteLine("年龄是:{0}", agestr);

                }

                else

                {

                    Console.WriteLine("输入的年龄有误");

            }

    正则表达式,它能很好解决这个问题,这里不是在讨论正则表达式,关于它的学习,请参考相关文档,在这里主要说明,在语言中引用这个技术,在很大程度上解决了数据的安全性,有效性。

    比如,我们都知道,年龄,特别是人的年龄,是在0150,没有负数,也没有见过超过150岁的人,如果前两段代码做的话,那就是分段验证,前面验证是否为整型,后面验证是否在0150岁之间,如果用正则,只需要如下变化:

    Regex reg = new Regex(@"^\d$|^\d{2}$|^1[0-4]\d$|^150$");

    只要一次的验证,改正则表达式,就能答到数据的验证。

    提倡用正则,但正则一般学习和理解起来有一点难度,这就是双刃剑
    ****欢迎关注我的asp.net core系统课程****
    《asp.net core精要讲解》 https://ke.qq.com/course/265696
    《asp.net core 3.0》 https://ke.qq.com/course/437517
    《asp.net core项目实战》 https://ke.qq.com/course/291868
    《基于.net core微服务》 https://ke.qq.com/course/299524
  • 相关阅读:
    无题
    一周损兵又折将
    防火墙安装配置(准备)
    徐州项目顺利验收
    悲惨的圣诞节
    [原]防火墙安装配置(日志)
    [转]有关加薪申请资料
    解决FireFox下XML对象转化成字符串
    ASP.NET Application and Page Life Cycle(asp.net生命周期)
    C# 利用反射动态创建对象[转]
  • 原文地址:https://www.cnblogs.com/axzxs2001/p/1715830.html
Copyright © 2011-2022 走看看