如何在Google Forms中设置username字段实现同一用户名仅可提交一次
Google表单同用户名重复提交拦截实现方案
Google表单原生没有内置字段重复提交校验能力,你可以通过绑定Google表格+Apps Script脚本的方式实现需求,具体操作步骤如下:
前期配置
- 先完成基础表单搭建:添加短回答类型的
username字段,将该字段设置为必填项 - 表单编辑页点击右上角「在表格中查看回复」,绑定一个Google表格用于存储所有提交记录,后续所有历史提交的用户名都会存储在这张表格中
编写校验脚本
- 打开刚绑定的存储回复的Google表格,点击顶部菜单栏「扩展程序」→「Apps Script」进入脚本编辑页面
- 清空编辑区默认生成的代码,粘贴以下代码,按照注释提示替换成你自己的表单、表格对应参数:
// 必须和表单里的username字段标题完全一致 const USERNAME_FIELD_TITLE = "username"; // 替换为存储提交记录的Google表格ID,可从表格URL中获取 const STORE_SHEET_ID = "替换为你的表格ID"; // 替换为存储提交记录的工作表名称,默认一般为「表单回复 1」 const STORE_SHEET_NAME = "表单回复 1"; function checkDuplicateUsername(e) { // 提取当前提交的用户名 const currentResponse = e.response; const allItemResp = currentResponse.getItemResponses(); let submitName = ""; for (let i = 0; i < allItemResp.length; i++) { if (allItemResp[i].getItem().getTitle() === USERNAME_FIELD_TITLE) { submitName = allItemResp[i].getResponse().trim().toLowerCase(); break; } } // 读取所有历史提交记录 const sheet = SpreadsheetApp.openById(STORE_SHEET_ID).getSheetByName(STORE_SHEET_NAME); const allRecord = sheet.getDataRange().getValues(); // 定位用户名所在列 let nameColIndex = -1; for (let col = 0; col < allRecord[0].length; col++) { if (allRecord[0][col] === USERNAME_FIELD_TITLE) { nameColIndex = col; break; } } // 遍历查重 let hasSubmitted = false; for (let row = 1; row < allRecord.length; row++) { const existName = String(allRecord[row][nameColIndex]).trim().toLowerCase(); if (existName === submitName) { hasSubmitted = true; break; } } // 命中重复规则则拦截提交,返回指定提示 if (hasSubmitted) { e.preventDefault(); throw new Error("You have already submitted"); } }
注:上述脚本默认对用户名做前后空格过滤、不区分大小写匹配,如果需要严格大小写匹配,直接删除代码中两处
.trim().toLowerCase()即可。
配置触发规则
- 在Apps Script编辑页左侧点击时钟样式的「触发器」按钮,选择「添加触发器」
- 按照以下参数配置触发器:
- 选择要运行的函数:
checkDuplicateUsername - 选择运行部署:
Head - 选择事件来源:
从表单 - 选择事件类型:
表单提交时
- 选择要运行的函数:
- 点击保存后按照弹窗提示完成账号权限授权即可,如果授权时弹出「Google未验证此应用」的提示,点击「高级」→「转到对应项目」继续完成授权即可
效果验证
配置完成后,当用户输入已经提交过的username尝试提交时,表单会直接拦截提交操作,在页面上展示You have already submitted的错误提示,重复提交的记录不会写入存储表格。
内容的提问来源于stack exchange,提问作者Anjali Chourasia
相关产品推荐
相关产品推荐

