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的两个特性共同导致的:
requireTextMatchesPattern不支持直接传入正则字面量对象,仅能接收字符串格式的正则规则- 用字符串书写正则规则时,反斜杠是JavaScript的转义字符,直接写
\d会被解析为普通字符d,无法匹配数字,需要转义为\\d - 没有加
^和$首尾锚定符的规则,只会校验输入中是否包含对应片段,无法限制输入总长度刚好为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
相关产品推荐
相关产品推荐

