零点博客实战:C#开发正则解析工具,涵盖HTML/CSS/JS与SQL注入防护

发布于 2023-10-27 | 分类:C# HTML Web开发 | 浏览次数:1,203

大家好,我是零点博客的博主。最近在整理站内工具箱,想把自己以前开发的一个正则表达式在线解析工具整理出来开源给粉丝。这个工具的前端涉及到了基础的HTML布局和CSS美化,后端则是纯正的C#逻辑处理。在开发过程中,我也踩了不少坑,特别是关于接口数据的格式化以及如何防止潜在的SQL注入攻击。今天就把这套开发流程复盘一下,希望能帮到正在学习Web开发的你。

一、前端布局:语义化的HTML结构

别看是一个简单的工具,HTML的结构一定要写好。我用到了 form 表单来提交数据,input 控件来接收用户的输入字符串。

这是工具的 HTML 核心代码:

<div class="container">
    <h2>正则表达式测试器</h2>
    <!-- 输入区域 -->
    <div class="input-group">
        <label for="regexInput">规则表达式:</label>
        <input type="text" id="regexInput" placeholder="例如:\d{3}-\d{4}" />
    </div>
    <div class="input-group">
        <label for="textInput">待匹配文本:</label>
        <textarea id="textInput"></textarea>
    </div>
    <button id="btnParse">开始解析</button>

    <!-- 结果展示区域 -->
    <div id="resultArea" class="hidden">
        <h3>匹配结果 (JSON格式)</h3>
        <pre id="jsonOutput"></pre>
    </div>
</div>

二、后端逻辑:C# 解析与JSON处理

接收到前端发送的字符串后,我们需要在后端进行验证和处理。C# 处理正则非常方便,直接引用 System.Text.RegularExpressions 命名空间即可。

我写了一个简单的 API 接口来处理这个请求:

[HttpPost("/api/regex/parse")]
public IActionResult ParseRegex([FromBody] RegexRequest request)
{
    if (string.IsNullOrWhiteSpace(request.Pattern))
        return BadRequest("规则不能为空");

    try
    {
        // 构建正则表达式对象
        Regex regex = new Regex(request.Pattern);
        // 匹配所有结果
        MatchCollection matches = regex.Matches(request.Text);

        var result = new 
        { 
            IsSuccess = true, 
            Count = matches.Count,
            // 将匹配结果转为List<string>方便前端展示
            Matches = matches.Cast<Match>().Select(m => m.Value).ToList() 
        };

        // 返回 JSON 数据
        return Ok(result);
    }
    catch (Exception ex)
    {
        return BadRequest(new { IsSuccess = false, Message = ex.Message });
    }
}

三、安全防护:杜绝SQL注入与数据处理

有些小伙伴可能会问,正则测试不需要数据库吧?其实不然。比如我想把用户的解析历史记录下来,方便下次快速使用,这时候就涉及到了数据库操作。

这里必须重点讲一下 SQL注入防护。很多新手喜欢直接拼接 SQL 字符串,这非常危险。我们应该使用参数化查询。

-- 错误示范(极易被注入)
string sql = "INSERT INTO logs VALUES ('" + pattern + "', ...)";

-- 正确示范(使用预处理语句)
string sql = "INSERT INTO logs (pattern, create_time) VALUES (@Pattern, @Time)";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@Pattern", pattern);
cmd.Parameters.AddWithValue("@Time", DateTime.Now);

四、数据存储与扩展:MySQL与爬虫结合

如果你的工具需要更强大的功能,比如提取网页 Title 或 Meta 描述,那就需要写爬虫了。抓取下来的 HTML 源码通常是乱糟糟的字符串,这时候又要用到正则和 XML/JSON 解析。

为了让数据展示更友好,我在 HTML 前端使用了 JSON.stringify 将后端传来的对象序列化,这样能保留数据的结构,而不是单纯的一堆字符串。

结语

开发这种在线工具,虽然看起来简单,但五脏俱全。从前端的 HTML/CSS 样式调整,到后端的 C# 业务逻辑,再到数据库的 SQL 操作,每一步都很重要。如果你觉得这篇实战笔记对你有帮助,欢迎在零点博客留言交流,或者关注我的后续更新!