You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写校验函数:判断用户是否在嵌套括号内输入textarea内容

解决方案

问题回顾

我有一个textarea,默认可包含任意类型的字符串,用户仅能在成对的括号(如Leave[])内部输入内容,外部无法输入;支持n层嵌套结构(如Leave[ Nested[ Test[] ] ])。需要实现函数判断用户是否在括号内输入,是则返回true,否则返回false:

const checkIfTypingBetweenBrackets=(prev:string,current:string):boolean =>{
// Code goes here
}

核心思路

要验证输入合法性,关键是定位用户输入的起始位置,再计算该位置前的括号平衡度:

  • 遇到[时平衡度+1,遇到]时平衡度-1
  • 若输入位置的平衡度>0,说明处于未闭合的括号内部,返回true;否则返回false

代码实现

const checkIfTypingBetweenBrackets = (prev: string, current: string): boolean => {
  // 找到两个字符串的第一个差异位置,即输入操作的起始点
  let diffIndex = 0;
  const minLength = Math.min(prev.length, current.length);
  while (diffIndex < minLength && prev[diffIndex] === current[diffIndex]) {
    diffIndex++;
  }

  // 计算从字符串开头到输入位置的括号平衡度
  let bracketBalance = 0;
  for (let i = 0; i < diffIndex; i++) {
    const char = current[i];
    if (char === '[') {
      bracketBalance++;
    } else if (char === ']') {
      // 避免无效的多余闭合括号干扰平衡计算
      if (bracketBalance > 0) {
        bracketBalance--;
      }
    }
  }

  // 平衡度>0意味着处于未闭合的括号内部
  return bracketBalance > 0;
};

逻辑说明

  1. 定位输入位置:逐字符对比prev和current,第一个不同的索引就是用户输入/修改的起始位置。
  2. 计算括号平衡:从字符串开头遍历到输入位置,统计[和]的数量差,忽略无效的多余闭合括号(避免平衡度出现负数)。
  3. 合法性判断:平衡度大于0时,当前输入位置处于至少一层未闭合的括号内部,返回true;反之则返回false。

内容的提问来源于stack exchange,提问作者Waseem Munir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 10:30:05