js 校验括号——括号不可嵌套且需成对出现

简介: js 校验括号——括号不可嵌套且需成对出现

实现原理

最终效果

完整代码

<template>
  <div style="padding: 30px">
    <p>校验规则 :</p>
    <ol>
      <li>括号不能嵌套</li>
      <li>括号必须成对出现</li>
    </ol>
    <el-input
      clearable
      placeholder="请输入例句!"
      v-model="exampleString"
      style="width: 400px"
    ></el-input>

    <p>
      校验结果:
      <span
        :style="{
          color: errorMsg ? 'red' : 'green',
        }"
      >
        {{ errorMsg || "校验通过" }}</span
      >
    </p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      exampleString: "",
      errorMsg: "",
    };
  },
  watch: {
    exampleString(val) {
      this.errorMsg = this.check(val);
    },
  },
  methods: {
    check(str) {
      let errorMsg = "";
      let leftBracketsList = ["(", "(", "[", "{"];
      let rightBracketsList = [")", ")", "]", "}"];
      let BracketsDic = {
        "(": ")",
        "(": ")",
        "[": "]",
        "{": "}",
      };
      let leftBracket = null;
      let leftBracketIndex = null;
      let index = 1;

      for (let char of str) {
        // 是否左括号
        if (leftBracketsList.includes(char)) {
          // 是否已有左括号
          if (leftBracket) {
            errorMsg = `因括号不可嵌套,第${leftBracketIndex}个字符 ${leftBracket} 在匹配右括号前,不能出现第${index}个字符 ${char} `;
            break;
          } else {
            leftBracket = char;
            leftBracketIndex = index;
          }
        } else {
          // 是否右括号
          if (rightBracketsList.includes(char)) {
            // 是否已有左括号
            if (leftBracket) {
              // 是否匹配左括号
              if (BracketsDic[leftBracket] === char) {
                leftBracket = null;
                leftBracketIndex = null;
              } else {
                errorMsg = `第${leftBracketIndex}个字符 ${leftBracket} 与第${index}个字符 ${char} 不匹配`;
                break;
              }
            } else {
              errorMsg = `第${index}个字符 ${char} 前缺少左括号`;
              break;
            }
          }
        }
        index++;
      }

      if (!errorMsg) {
        if (leftBracket) {
          errorMsg = `第${leftBracketIndex}个字符 ${leftBracket} 后缺少右括号`;
        }
      }

      return errorMsg;
    },
  },
};
</script>
目录
相关文章
|
9月前
|
移动开发 JavaScript 前端开发
JavaScript的正则表达式实现邮箱校验
JavaScript的正则表达式实现邮箱校验
|
JavaScript 数据可视化 前端开发
【Vue.js】vue-cli搭建SPA项目并实现路由与嵌套路由---详细讲解
【Vue.js】vue-cli搭建SPA项目并实现路由与嵌套路由---详细讲解
119 0
|
1月前
|
设计模式 数据安全/隐私保护
Next.js 实战 (七):浅谈 Layout 布局的嵌套设计模式
这篇文章介绍了在Next.js框架下,如何处理中后台管理系统中特殊页面(如登录页)不包裹根布局(RootLayout)的问题。作者指出Next.js的设计理念是通过布局的嵌套来创建复杂的页面结构,这虽然保持了代码的整洁和可维护性,但对于特殊页面来说,却造成了不必要的布局包裹。文章提出了一个解决方案,即通过判断页面的skipGlobalLayout属性来决定是否包含RootLayout,从而实现特殊页面不包裹根布局的目标。
90 33
|
5月前
|
JavaScript 前端开发
js_Ipv4以及ipv4段正则校验
几种JavaScript正则表达式,用于校验IPv4地址的有效性,包括支持CIDR表示法的变体。
123 4
|
6月前
|
前端开发 JavaScript 数据安全/隐私保护
前端JS正则校验密码之3种实现方式
这篇文章展示了三种使用JavaScript正则表达式来校验密码的方法,密码需要满足包含大写字母、小写字母、数字及特殊字符,并在8到16位之间,同时提供了示例代码和实现效果。
206 1
前端JS正则校验密码之3种实现方式
|
4月前
|
Web App开发 JavaScript 前端开发
Javascript嵌套函数的调用
Javascript嵌套函数的调用
|
9月前
|
JavaScript 索引
用原生js的postMessage实现iframe传值,也可以用于跨域嵌套iframe传值
用原生js的postMessage实现iframe传值,也可以用于跨域嵌套iframe传值
用原生js的postMessage实现iframe传值,也可以用于跨域嵌套iframe传值
|
7月前
|
JavaScript
js 区分中英文输入法(如中英文括号)
js 区分中英文输入法(如中英文括号)
105 4
|
8月前
|
前端开发 JavaScript
JSX 中带有大括号的 JavaScript
JSX 中带有大括号的 JavaScript
|
7月前
|
移动开发 JavaScript
thinkPHP5.0开发微信H5页面分享接口signature验证失败,signature与微信 JS 接口签名校验工具返回结果不一致
thinkPHP5.0开发微信H5页面分享接口signature验证失败,signature与微信 JS 接口签名校验工具返回结果不一致
118 0

热门文章

最新文章

  • 1
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    23
  • 2
    Node.js 中实现多任务下载的并发控制策略
    32
  • 3
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    25
  • 4
    【JavaScript】深入理解 let、var 和 const
    48
  • 5
    【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
    44
  • 6
    【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
    53
  • 7
    【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
    55
  • 8
    如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
    71
  • 9
    【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
    55
  • 10
    JavaWeb JavaScript ③ JS的流程控制和函数
    62