首页 > 其他分享 >验证数据输入的合法性

验证数据输入的合法性

时间:2023-12-11 17:25:26浏览次数:27  
标签:合法性 return string 验证 result sb false 输入 Result

我们软件开发过程中,很多时候都需要用户进行数据录入。
录入以后,我们需要对数据的合法性进行判断,每一个需要判断的字段都需要一个判断条件,冗余代码较多。一直觉得这块比较繁琐,特别是需要输入和验证的字段比较多的时候。
之前尝试用过FluentValidation和Validation,貌似都跟期望的有点差距。
一直想对这块进行优化。今天进行了一些简单的尝试。

代码:

using System;
using System.Text;

namespace CgdataBase;

public static class InputHelper
{
    public static bool InputValueIsValid<T>(string text, string keyName, Func<T, bool> func, StringBuilder builder)
    {
        try
        {
            if (text.IsNullOrEmpty())
            {
                builder?.AppendLine($"请输入 {keyName}");
                return false;
            }

            var value = (T)Convert.ChangeType(text, typeof(T));
            if (func != null)
            {
                var result = func.Invoke(value);
                if (result == false)
                {
                    builder?.AppendLine($"请输入正确的 {keyName}");
                }

                return result;
            }

            return true;
        }
        catch (Exception)
        {
            builder?.AppendLine($"请输入正确的 {keyName}");
        }

        return false;
    }
}

使用示例:

private void OnSubmit()
{
    bool result = true;
    StringBuilder sb = new StringBuilder();
    result &= InputHelper.InputValueIsValid<string>(TemplateName, "模板名称", s => s.IsContainValidText(), sb);
    result &= InputHelper.InputValueIsValid<string>(FileName, "文件名", s => s.IsContainValidText(), sb);
    result &= InputHelper.InputValueIsValid<int>(KeyCount, "个数", s => s >= 0, sb);

    if (result == false)
    {
        MessageBox.Show(sb.ToString());
        return;
    }

    if (Result == null)
        Result = new TemplateInfo();

    ObjectHelper.DeepCopy(this, Result, false);
    Result.TemplateContent = GetTemplateContent();

    App.GetActiveWindow().DialogResult = true;
}

这样的话,在界面的ViewModel部分,所有字段对应的数据类型都可以定成string,提交时根据目标类型进行转换和判断。
我这里面使用的ObjectHelper.DeepCopy(this, Result, false)方法也里面封装了,直接由string类型转换成目标类型的转换操作。

标签:合法性,return,string,验证,result,sb,false,输入,Result
From: https://www.cnblogs.com/wzwyc/p/17894900.html

相关文章

  • bbs 注册登录 验证
    注册页面 -用户名-密码-确认密码-邮箱-手机号-头像#form组件可以帮助我们 1快速生成前端页面2数据校验3错误处理#如何使用 -1写一个类,继承forms.Form-2在类中写属性和方法 -属性:要跟咱们要校验或自动生成页面的字段一一对应......
  • 运行时锁定正确性验证器 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/locking/lockdep-design.html锁类该验证器操作的基本对象是“锁”的“类”。“锁”的“类”是一组逻辑上相同的锁,即使这些锁可能有多个(可能有成千上万个)实例化。例如,inode结构中的锁是一个类,而每个inode都有自己的该锁类的实例化。验......
  • 计组复习(输入输出)
    目录前言IO接口编址统一编址单独编址IO操作的发展通过普通接口以立即程序传送方式以程序查询方式以中断方式中断向量中断过程中断允许位和优先级通过DMA预处理DMA请求DMA响应DMA传送结束处理通过通道通过IOP前言本文为JMU22级软件计组考前复习而总结归纳,吸收了课本上晦涩且长......
  • 宝塔面板申请ssl证书验证失败,域名解析错误或验证URL无法被访
    一、问题描述使用宝塔面板建立站点,申请let‘sEncrypt免费ssl证书时提示验证失败,域名解析错误或验证URL无法被访!网上找了各种方案检查防火墙配置,安全组配置,域名解析,nginx代理等等乱七八糟的配置检查来检查去发现都没问题,后来我注意到,这个错误提示是去访问本站点内的一个文......
  • SpringBoot项目之Kaptcha实现登录验证码
    一、pom.xml加载该依赖<dependency><groupId>com.github.axet</groupId><artifactId>kaptcha</artifactId><version>0.0.9</version></dependency>二、RestFul风格,在这里写一个调用验证码的接口:@GetMapping(value="/captcha.......
  • FastAPI-请求参数与验证
    最近想搞一下接口,希望能简单上手,前后端分离,大致看了一遍SpringBoot,Gin,NodeJs,Flask,Django,FastAPI等,感觉还是用Python语言来写比较简单呀,关键点在于它语法清晰,能让我直接思考业务逻辑,而不是各种语法折腾.FASTAPI简介Documentation:https://fastap......
  • JDBC针对SQLServer的sendStringParametersAsUnicode=false的验证
    JDBC针对SQLServer的sendStringParametersAsUnicode=false的验证背景部分客户的SQLServer数据库出现了大量死锁的情况.虽然部分客户并没有反馈死锁影响了产品的正常使用但是在大量业务时还是会出现卡顿等的现象基于此,经过微软case的研究,发现是JDBC4.0之后默认为ture的......
  • C++基础 -1- 标准输入输出
    ———————标准输入输出——————— ......
  • Python 输入输出与文件处理: io、pickle、json、csv、os.path 模块详解
    Python提供了强大的输入输出和文件处理工具,通过io、pickle和json等模块,开发者可以轻松处理文件、序列化和反序列化数据,并在不同格式之间进行转换。在本文中,我们将深入介绍这些模块的用法和实际示例。1.io模块:强大的输入输出工具io模块提供了对文件I/O进行灵活处理的能力......
  • Python 输入输出与文件处理: io、pickle、json、csv、os.path 模块详解
    Python提供了强大的输入输出和文件处理工具,通过io、pickle和json等模块,开发者可以轻松处理文件、序列化和反序列化数据,并在不同格式之间进行转换。在本文中,我们将深入介绍这些模块的用法和实际示例。1.io模块:强大的输入输出工具io模块提供了对文件I/O进行灵活处理的能力......