表单问题TextValidation的AppsScript正则无法识别数字或N/A
问题:Google表单TextValidation正则无法匹配数字或"N/A"
我在为表单问题配置TextValidation的正则表达式时遇到了问题。需要验证用户输入的内容是数字或"N/A",但尝试使用正则模式(\d*)|(N/A)时,规则完全不起作用。做了以下测试:
- 使用
(\d*)可以正常验证数字输入; - 使用
(N/A)可以正常验证"N/A"输入; - 使用
(N/A)|(n/a)可以正常验证"N/A"或"n/a"输入。
困惑于组合后的正则为何失效,代码如下:
let item = form.addTextItem(); let textValidation = FormApp.createTextValidation() .setHelpText('Take another look matey') .requireTextMatchesPattern("(\\d*)|(N/A)") .build(); item.setValidation(textValidation);
问题原因
(\d*)表示匹配0个或多个数字,这意味着空字符串也会被该分支匹配。正则的逻辑是只要任意一个分支匹配就判定通过,所以不管用户输入什么内容,正则都会优先匹配到空字符串,直接通过验证,自然起不到限制作用。
解决方案
需要用^(字符串开头)和$(字符串结尾)锚定整个输入,确保完全匹配;同时把\d*改为\d+,要求至少输入1个数字(避免空输入被误判为数字)。
1. 严格匹配数字(至少1位)或"N/A"
修改后的正则:
^\d+$|^N\/A$
对应代码:
let item = form.addTextItem(); let textValidation = FormApp.createTextValidation() .setHelpText('Take another look matey') .requireTextMatchesPattern("^\\d+$|^N\\/A$") .build(); item.setValidation(textValidation);
2. 支持大小写(允许"N/A"或"n/a")
添加(?i)标记忽略大小写,正则:
(?i)^(\d+|N\/A)$
对应代码:
let item = form.addTextItem(); let textValidation = FormApp.createTextValidation() .setHelpText('Take another look matey') .requireTextMatchesPattern("(?i)^(\\d+|N\\/A)$") .build(); item.setValidation(textValidation);
内容的提问来源于stack exchange,提问作者meelszz
相关产品推荐
相关产品推荐

