C#如何实现打印页码的合法性验证

       本次是要完成一个关于页码范围的验证。就是我们使用word文档进行打印的时候,页码的选择范围。在这个输入框中我们可以输入具体的页码(如:3)也可以使用范围(如:3-5)。而且可以使用“,"来连接多个选项(如1,3,4-5)。

要实现数据合法性验证大致分两步:

第一步  运用正则表达式验证格式的正确性   也就是判断数字,“,”以及“-”的使用是否合法,即(如1,3,4-5)我们认为合法,(1,3,2-5)或者(1,5-2,30)这些格式正确但是存在页码重复或者5-2这种顺序错误的表达方式我们在第一步也判定为格式正确(这些错误表达我们会在第二部验证)具体正则表达式如下:

string strRegex = @"^[1-9](\d)?(-\d+)?([,,]\d+(-\d+)?)*$";

 bool flag = Regex.IsMatch(str.Trim(), strRegex);

第二步 通过逻辑运算验证页码是否存在重复或者页码顺序错误

     private bool Method(string str, int MaxValue, Control control)
        {
            string strRegex = @"^[1-9](\d)?(-\d+)?([,,]\d+(-\d+)?)*$";
            var flag = Regex.IsMatch(str.Trim(), strRegex);
            richTextBox1.Clear();
            if (flag)
            {
                var list = new List<(int, int)>();
                foreach (var item in str.Split(new char[] { ',', ',' }))
                {
                    if (item.Contains('-'))
                    {
                        var result = item.Split('-');

                        if (Convert.ToInt32(result[0]) > Convert.ToInt32(result[1]))
                        {
                            errorProvider1.SetError(control, "数据顺序错误");
                            return false;
                        }
                        else
                        {
                            list.Add((Convert.ToInt32(result[0]), 
 Convert.ToInt32(result[1])));
                        }
                    }
                    else
                    {
                        list.Add((Convert.ToInt32(item), Convert.ToInt32(item)));
                    }
                }
                var resultMerge = list.Select(x => Enumerable.Range(x.Item1, x.Item2 - x.Item1 + 1)).SelectMany(x => x).ToList();
                var distinctResult = resultMerge.Distinct().ToList();
                distinctResult.Sort();
                if (distinctResult.Count() < resultMerge.Count())
                {
                    errorProvider1.SetError(control, "数据存在交集");
                    return false;
                }
                if (distinctResult.Last() > MaxValue)
                {
                    errorProvider1.SetError(control, "数据设定范围");
                    return false;
                }
                errorProvider1.Clear();
                distinctResult.ForEach(x => richTextBox1.AppendText(x + "  "));
                return true;

            }
            else
            {
                errorProvider1.SetError(control, "数据基本格式错误");
                return false;
            }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值