AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 158924
Accepted
Nishant
Nishant
Asked: 2016-12-23 02:46:16 +0800 CST2016-12-23 02:46:16 +0800 CST 2016-12-23 02:46:16 +0800 CST

验证 HTML 输入字符串

  • 772

一个部分解决方案是获得所有在和Notes (VARCHAR)中存在不平衡的地方。但是我该如何为此编写查询呢?<>

例如:

Input: <html>Hello World</html>
Output: Valid HTML

Input: <html><Hello World</html>
Output: Invalid HTML

Input: <html><Hello World></html>
Output: Valid HTML (Marking it Valid is OK for my use case)
But hey isn't that a valid HTML? It could be <name attribute>

有没有更好的方法来检查“无效”HTML,其中“无效”被定义为 HTML 内容<后跟一些HTML Element按照规范无效的字符?

最初我以为我可以检查 for<name后跟一个(Space) 但 HTML 属性的语法为 as<name attribute并在最后关闭>。

sql-server
  • 1 1 个回答
  • 326 Views

1 个回答

  • Voted
  1. Best Answer
    Paul White
    2016-12-23T05:42:18+08:002016-12-23T05:42:18+08:00

    如果您只想确认输入字符串由一系列<...>元素组成:

    1. <使用您最喜欢的字符串拆分器拆分字符上的字符串
    2. 第一个元素必须为空
    3. 后续元素必须恰好包含一个>字符

    如果每个元素都通过上述测试,则​​输入字符串有效。

    例子

    字符串拆分器

    我使用的是SQL#.String_Split4k来自 Solomon Rutzky 的免费版 SQLCLR SQLsharp 库中的流式表值函数。

    如果输入字符串可能超过 4000 个字符,则将SQL#.String_Split改用(效率较低的)函数(它处理最多 2GB 的字符串)。

    任何可以使用序列号正确返回空元素的高效 字符串拆分器(T-SQL 或其他)都可以使用。

    下面的示例显示了输出SQL#.String_Split4k返回的排序。

    第一个参数是要拆分的字符串。第二个参数是分隔符。第三个参数(SplitOption)设置为 1,这意味着保留空元素。

    SELECT
        SS.SplitNum,
        SS.SplitVal
    FROM SQL#.String_Split4k(N'<a><b><c>', N'<', 1) AS SS;
    

    输出:

    ╔══════════╦══════════╗
    ║ SplitNum ║ SplitVal ║
    ╠══════════╬══════════╣
    ║ 1 ║ ║
    ║ 2 ║ 一> ║
    ║ 3 ║ b> ║
    ║ 4 ║ c> ║
    ╚══════════╩══════════╝
    

    表格和测试数据

    CREATE TABLE #T
    (
        row_id integer IDENTITY PRIMARY KEY,
        string varchar(50) NOT NULL
    );
    
    INSERT #T 
        (string)
    VALUES 
        ('<html>Hello World</html>'),
        ('<html><Hello World</html>'),
        ('<html><Hello World></html>');
    

    解决方案

    SELECT
        T.row_id,
        string = (SELECT TOP (1) T2.string FROM #T AS T2 WHERE T2.row_id = T.row_id),
        is_valid =
            MIN
            (
                CASE
                    -- First element must be blank
                    WHEN SS.SplitNum = 1 AND SS.SplitVal = N'' THEN 1
                    WHEN SS.SplitNum = 1 THEN 0
                    -- Other elements must contain exactly one >
                    WHEN SS.SplitVal NOT LIKE N'%>%' THEN 0
                    WHEN SS.SplitVal LIKE N'%>%>%' THEN 0
                    -- Otherwise valid
                    ELSE 1
                END
            )
    FROM #T AS T
    CROSS APPLY SQL#.String_Split4k(T.string, '<', 1) AS SS
    GROUP BY T.row_id
    ORDER BY T.row_id;
    

    输出

    ╔════════╦════════════════════════════╦══════════╗
    ║ row_id ║           string           ║ is_valid ║
    ╠════════╬════════════════════════════╬══════════╣
    ║      1 ║ <html>Hello World</html>   ║        1 ║
    ║      2 ║ <html><Hello World</html>  ║        0 ║
    ║      3 ║ <html><Hello World></html> ║        1 ║
    ╚════════╩════════════════════════════╩══════════╝
    
    • 8

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve