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

使用requireTextDoesNotMatchPattern阻止Google Form重复选号失败求助

解决Google表单阻止重复数字输入的问题

原脚本的问题分析

  • 正则表达式带空格且未锚定数字边界,导致匹配逻辑完全错误
  • 未过滤数据列中的空值,空单元格会干扰正则规则的有效性
  • 正则格式错误导致requireTextDoesNotMatchPattern无法正常生效,requireTextMatchesPattern也会因为规则错误触发全量报错

修正后的脚本

function uniqueresp() {
  const ss = SpreadsheetApp.openById(sheetId);
  const sheet = ss.getSheetByName('elenco');
  const form = FormApp.openById(formId);

  // 提取已用数字,过滤空值并去重
  const usedNumbers = sheet.getDataRange().getDisplayValues()
    .map(row => row[1].trim())
    .filter(num => num !== '');

  // 生成精确匹配的正则规则,锚定数字的完整边界
  const pattern = usedNumbers.length > 0 ? `^(${usedNumbers.join('|')})$` : '';

  const textItem = form.getItems()
    .filter(item => item.getTitle() === 'Inserire Numero Pilota')[0]
    .asTextItem();

  let validation;
  if (pattern) {
    validation = FormApp.createTextValidation()
      .setHelpText("Numero non disponibile. Sceglierne un altro")
      .requireTextDoesNotMatchPattern(pattern)
      .build();
  } else {
    // 无已用数字时移除验证规则
    validation = null;
  }

  textItem.setValidation(validation);
}

关键改进点

  • 过滤空值:避免空单元格生成无效正则规则
  • 锚定正则边界:^和$确保只匹配完整数字,防止已选12时误拦截123这类包含数字的内容
  • 处理无数据场景:此时移除验证,允许任意数字输入
  • 去除数字前后空格:防止用户输入带空格的数字绕过验证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:57:32