前端sql语句输入框以及格式化sql语句和sql关键词高亮---sql-formatter、vue-codemirror

这篇具有很好参考价值的文章主要介绍了前端sql语句输入框以及格式化sql语句和sql关键词高亮---sql-formatter、vue-codemirror。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.下载

npm install sql-formatter --save   //sql语句格式化 版本2.3.3(不然报错) 
npm install vue-codemirror --save  //用于sql语句关键词高亮

2.引入

import sqlFormatter from 'sql-formatter';
import CodeMirror from 'codemirror/lib/codemirror';  
import 'codemirror/lib/codemirror.css';
import 'codemirror/theme/darcula.css';
import 'codemirror/mode/sql/sql.js';

3.使用

<template>
  <textarea  autofocus="true" ref="mycode" class="codesql" v-model="sqlCode"> </textarea>
  <Button class="mr" type="primary" @click="handleFormat">格式化</Button>
 </template>
 
 <script>
    export default {
      data(){
       return{
         sqlCode: '',
         sqlScript:'select * from 表格名称',
         editor:null
       }
      },
      method:{
       // sql初始化
        sqlInit() {
          this.editor = CodeMirror.fromTextArea(this.$refs.mycode, {
	          value: this.sqlCode,
	          mode: 'text/x-mariadb', 
	          indentWithTabs: true,
	          smartIndent: true,
	          lineNumbers: true,
	          matchBrackets: true,
	          cursorHeight: 1,
	          lineWrapping: true,
	          readOnly: false,
	          theme: 'darcula',
	          autofocus: true,
         });
       },
       // 格式化
        handleFormat() {
           let sql = sqlFormatter.format(this.sqlScript, { syntax: 'sql' });
           this.editor.setValue(sql);  // 设置sql语句
           this.sqlScript=this.editor.getValue();  //获取sql语句
         },
      }
    }
    
 </script>

4.遇到的问题

“select * from 表格名称” 这个字符包含了中文,如果进行格式化,就会变成 “select * from 表 格 名 称” 中文之前添加了空格

解决方法:使用正则去掉空格

使用正侧格式化去掉空格我尝试的几种方法

方法一
//  const result = sql.replace(/([\u4e00-\u9fa5])\s+/g, '$1'); 
   // 这种方式如果中文后面还有引文就不行
   例如 "select * from 表格名称 where age='1'"
   // "select * from 表格名称where age='1'" 就会把中文后面的空格去掉❌
方法二
//  const result = sql.replace(/(\s*)([\u4e00-\u9fa5])/g, '$2').replace(/([a-zA-Z])([\u4e00-\u9fa5])/g, '$1 $2');
 ql.replace(/(\s*)([\u4e00-\u9fa5])/g, '$2') 这个是去掉中文前面的空格,中文前面可能是英文,所以还需一步给英文前面添加空格replace(/([a-zA-Z])([\u4e00-\u9fa5])/g, '$1 $2')
// 例如 "select * from 表格名称 where age='18' and name='rose中文'" 
   //"select * from 表格名称 where age='18' and name='rose 中文'" 就会把name='rose 中文'" 中间加一个空格❌
方法三(最终版本)
 // 格式化
    handleFormat() {
      let sql = sqlFormatter.format(this.editor.getValue());
      let arr = ['select', 'from', 'as', 'where', 'group by', 'order by', 'and', 'on', 'like', 'end'];
      let result = this.addSpaceAfterWord(sql.replace(/(\s*)([\u4e00-\u9fa5])/g, '$2'), arr);
      this.editor.setValue(result);
      console.log(result, 'result');
    },
    addSpaceAfterWord(sql, keywords) {
      const keywordPattern = new RegExp(`\\b(${keywords.join('|')})\\b`, 'gi');
      return sql.replace(keywordPattern, '$& ');
    },
//先把中文之间的空格给去掉,这时候英文单字后面就不会有空格,那么这是我就把关键字写成数组使用正侧来替换
1.keywords.join('|') 来创建一个用于匹配目标英文单词的正则表达式模式,其中 | 表示逻辑或运算符,用于将关键字连接在一起。
2.replace 方法来匹配查询字符串中的目标英文单词,并在其后添加一个空格。$& 是替换字符串中的特殊字符,表示与正则表达式匹配的内容本身。
3. \b 单词边界,以确保只匹配完整的目标英文单词,并避免在其他地方不必要地添加空格。另外,gi 修饰符用于进行全局匹配和忽略大小写匹配。

5.优化 可以控制sql输入框的高度

sqlformatter前端格式化插件,前端,sql,数据库文章来源地址https://www.toymoban.com/news/detail-784837.html

 <!-- 拖动改变大小 -->
 <div id="resizeId" class="resize"></div>
  dragControllerDiv() {
      const resize = document.querySelector('#resizeId'); // 拖拽条
      // 鼠标按下事件
      resize.addEventListener('mousedown', this.onMouseDown);//鼠标按下
    },
    onMouseDown(e) {
      this.resizeBox = e.target;
      const sqlStatement = document.querySelector('.sqlStatement');
      this.startY = e.clientY;
      this.curLen = sqlStatement.clientHeight;
      document.addEventListener('mousemove', this.onMousemove);//鼠标移动改变高度
      document.addEventListener('mouseup', this.onMouseup);  // 鼠标抬起销毁
    },
    onMousemove(e) {
      const endX = e.clientY;
      const moveLen = endX - this.startY; // (endX-startY)= 移动的距离
      const CurBoxLen = this.curLen + moveLen; // sql的高+移动的距离=现在sql的高度
      const sqlStatement = document.querySelector('.sqlStatement');
      const rightCenter = document.querySelector('.rightCenter');
      let tH = rightCenter.clientHeight - CurBoxLen - 120; //表格的高=一整个区域减去sql的高-其他元素的高
      this.resizeBox.style.background = '#2d8cf0';
      if (CurBoxLen < 200 || tH <= 300) return;
      sqlStatement.style.height = CurBoxLen + 'px';
      this.$nextTick(() => {
        this.resultHeight = tH + 'px';
      });
    },
    onMouseup(e) {
      this.resizeBox.style.background = '#d6d6d6';
      document.removeEventListener('mousedown', this.onMouseDown);
      document.removeEventListener('mousemove', this.onMousemove);
    },
 
 //css
 .resize {
  cursor: row-resize;
  float: left;
  position: relative;
  left: 45%;
  background-color: #d6d6d6;
  border-radius: 5px;
  margin-top: -24px;
  width: 50px;
  height: 10px;
  background-size: cover;
  background-position: center;
  font-size: 32px;
  color: white;
}

到了这里,关于前端sql语句输入框以及格式化sql语句和sql关键词高亮---sql-formatter、vue-codemirror的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • sqlite3日期时间格式化和自动输入

    Sqlite3系列:初步💎where💎select sqlite中并未提供单独的日期时间类型,但提供了三种时间表示方式 通过text来存储时间文本 用整型来存储时间戳,时间戳是从1970-01-01算起的秒数 用浮点型来存储自儒略日开始算起的天数,儒略日即公元前4713年1月1日中午12点。 并且提供了一些

    2024年02月06日
    浏览(53)
  • Python 用户输入和字符串格式化指南

    Python 允许用户输入数据。这意味着我们可以向用户询问输入。在 Python 3.6 中,使用 input() 方法来获取用户输入。在 Python 2.7 中,使用 raw_input() 方法来获取用户输入。以下示例要求用户输入用户名,并在输入用户名后将其打印在屏幕上: Python 3.6: Python 2.7: 为了确保字符串按预

    2024年02月05日
    浏览(82)
  • 格式化输入/输出(c语言超详细系列)(一)

    前言; Hello,大家好,我是心跳sy,今天我们主要讨论一下格式化输入/输出(一),包括printf,scanf的基本使用方法及注意事项、转换说明的简单理解以及转义序列的讲解,后续将持续带来对转换说明的深入研究以及输入缓冲的概念与文件相联系的知识,以及包括字符的输入输

    2024年02月13日
    浏览(47)
  • 在线SQL格式化工具

    工具地址:http://sql.wc139.com/ SQL格式化工具介绍 在线SQL格式化工具是一款针对SQL语句进行压缩与格式化的工具,可实现SQL语句的在线压缩与格式化功能,可运用于对复杂SQL语句的分析或者是程序代码优化上,只是清晰的结构,才能让您更好的优化数据库查询或写入。 关于SQL介绍

    2024年02月03日
    浏览(56)
  • SQL Server日期格式化

    一、时间戳的生成 使用dateDiff方法,运算当前时间到标准时间之间的秒数。 DATEDIFF(s,‘1970-01-01 00:00:00’, getdate()) 二、日期格式转换 使用convert(data_type,source_data,style)进行格式转换。利用style控制转换格式。 结果: CONVERT(nvarchar(80),getdate(),0)----07 27 2022 8:33AM CONVERT(nvarchar(80),getd

    2024年02月06日
    浏览(51)
  • printf和scanf的串口重定向,格式化输入输出

    通过重定向C标准库的printf和scanf函数,实现串口的格式化输出; 调用MDK微库(MicroLib)的方法和调用标准库的方法。 我们使用的正点原子STM32F103RB NANO开发板上将USART1(引脚为PA9,PA10)接出 USART1并没有在PCB上连接在一起,需要通过跳线帽来连接一下。这里我们把 P5 的 RXD 和 TXD 用

    2024年02月04日
    浏览(55)
  • SQL SERVER 中日期格式化

    目录 1.date和datetime类型的区别 2. GETDATE()函数,返回当前日期时间(datetime类型) 3. CONVERT()函数,格式化日期 4. DATEPART() 函数  date是SQL Server 2008新引进的数据类型。它表示一个日期,不包含时间部分,可以表示的日期范围从公元元年1月1日到9999年12月31日。只需要3个字节的存

    2024年02月04日
    浏览(69)
  • C++I/O流——(4)格式化输入/输出(第一节)

    归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝 含泪播种的人一定能含笑收获! 一起加油! 目录 前言:  用ios类成员函数实现格式化输入/输出: 1.控制输入/输出的

    2024年01月21日
    浏览(38)
  • C++I/O流——(4)格式化输入/输出(第二节)

    归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝 含泪播种的人一定能含笑收获! 一起加油!         格式化输出还可以使用控制符,这些控制符可以直接插入到输

    2024年01月18日
    浏览(46)
  • c# 时间获取以及格式化方式

    在C#中,你可以使用DateTime结构来获取并格式化时间。以下是一些示例和技巧: 获取当前日期和时间: 获取特定日期和时间: 格式化日期和时间为字符串: 使用自定义格式化字符串获取特定的日期和时间部分: 使用预定义格式字符串获取常见的日期和时间格式: 还可以使用

    2024年02月13日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包