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

Google Apps Script Form的textValidationBuilder不识别正则模式问题

问题:Google Apps Script 表单TextItem手机号验证始终失败

我正在使用Google Apps Script创建表单,尝试为TextItem输入项添加最简单的手机号验证功能时始终失败。我仅需要用户输入10位纯数字手机号,不含空格、横杠、点号,需包含区号,我知道这并非技术上最优的手机号验证方案,但完全符合我们的使用需求。

以下是我生成该字段的代码段(已编辑为更易复现的示例):

function CreateForm() {
  var form = FormApp.create('Test');

  var tenantNum = form.addTextItem()
  .setTitle("Tenant Phone #");
  var phoneValid = FormApp.createTextValidation()
  .setHelpText("Please enter valid phone number, 10-digits, no symbols or spaces.")
  .requireTextMatchesPattern(/\d{10}/g)
  .build();
  tenantNum.setValidation(phoneValid);

  console.log(form.getPublishedUrl())
}

我还尝试了其他多种写法,包括:

  • 单独去掉捕获组或全局标记
.requireTextMatchesPattern(/\d{10}/)
  • 将正则写为字符串字面量
.requireTextMatchesPattern("\d{10}")
  • 更基础的数字范围写法
.requireTextMatchesPattern(/[0-9]{10}/)
  • 全量写满10位匹配符
.requireTextMatchesPattern(/\d\d\d\d\d\d\d\d\d\d/)

除此之外我还尝试使用.requireTextContainsPattern()方法。

但无论在表单中输入什么内容,都会触发以下报错提示:

Please enter valid phone number, 10-digits, no symbols or spaces.

验证报错截图

我目前猜测可能是该校验方法仅支持字符串校验,与用户输入的内容类型存在冲突,但同样的校验规则和正则在手动创建表单时完全可以正常生效,我完全找不到问题根源,恳请各位帮忙解答!


解决方案

核心原因

你的问题是Google Apps Script表单验证API的两个特性共同导致的:

  1. requireTextMatchesPattern 不支持直接传入正则字面量对象,仅能接收字符串格式的正则规则
  2. 用字符串书写正则规则时,反斜杠是JavaScript的转义字符,直接写\d会被解析为普通字符d,无法匹配数字,需要转义为\\d
  3. 没有加^和$首尾锚定符的规则,只会校验输入中是否包含对应片段,无法限制输入总长度刚好为10位。

修复后代码

把验证规则替换为以下写法即可正常生效:

var phoneValid = FormApp.createTextValidation()
  .setHelpText("Please enter valid phone number, 10-digits, no symbols or spaces.")
  .requireTextMatchesPattern("^\\d{10}$")
  .build();

如果担心转义混淆,也可以用数字范围写法,无需处理反斜杠转义:

.requireTextMatchesPattern("^[0-9]{10}$")

规则说明

  • ^ 匹配输入内容的开头
  • [0-9]{10} / \\d{10} 匹配恰好10个0-9的数字字符
  • $ 匹配输入内容的结尾
    三者组合可以严格限制用户必须输入刚好10位纯数字,无其他多余字符,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:57:00