控制台输入验证

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$");

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

提倡用正则,但正则一般学习和理解起来有一点难度,这就是双刃剑

转载于:https://www.cnblogs.com/axzxs2001/archive/2010/04/20/1715830.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值