javascript - 验证用户在 Google-Sheets 上输入的时间

标签 javascript google-apps-script google-sheets

我有以下变量赋值

function onEdit(e) {
    if (e.range.getColumn() == 3){
      var isValid = /^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$/.test(e.value);
   }
}

我正在尝试测试当一个人在 Google 电子表格的第三列中编辑一个值时,他们输入的值是否是 HH:MM 格式的有效时间,带有 AM 或 PM。

我在网上找到了上面的内容,但我以前从未见过这种理解时间的方式。有人可以向我解释发生了什么,或者将我链接到一篇关于上述语法如何工作的文章吗?

希望最终能够做这样的事情:

function onEdit(e){
    if (the user edits manually edits a value in the third column){
       determine whether the value they entered is a valid time 
       if it is{
          let the change go through
       }
       if it is not{
           alert("Sorry your change can't go through");
       }
    }

}

根据我的阅读,警报的语法已经正确

最佳答案

您所发现的称为“正则表达式”(RegEx 或 RegExp),它是一种用于匹配字符串的语法,非常强大并且可能非常复杂。有专门介绍 RegEx 的长篇书籍,因此我将尝试向您简要概述它的工作原理,而不会陷入真正全面解释它所需的许多具体细节。

请在此处查看 RegEx 维基百科: https://en.wikipedia.org/wiki/Regular_expression

在此处查看有关在 javascript 中使用正则表达式的文档: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

要清楚,在您的示例中,RegEx 部分是语句:

/^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$/

其工作原理的简要总结如下:

  • 斜杠(/)表示正则表达式的开始结束
  • ^ 匹配字符串的开头
  • $匹配字符串的结尾
  • >?表示“可选地匹配”紧接在其之前的组或字符
  • |表示“或”
  • 大括号 ( ) 用于将一组匹配项分组在一起
  • [] 表示要匹配的字符集。 [0-9] 将匹配从 0 到 9 的任何数字。
  • : 是一个文字字符,它在有效时间的中间匹配:。

所以:

^([0-1]?[0-9]|2[0-4]): 表示从字符串的开头到第一个冒号,匹配 0 到 19 或20 到 24 - 代表小时。第一个 [0-1] 之后的问号使其成为可选的,因此您可以将 2am 匹配为 2:00 或 02:00

([0-5][0-9])(:[0-5][0-9])?$ 表示匹配分钟(00 到 59)并可选择匹配秒(:加上 00 到 59),直到字符串的末尾。

包括 ^ 和 $ 特殊字符可确保字符串中没有多余的字符。

最后要注意的是,由于 RegEx 语法可能非常复杂且难以阅读,因此不要盲目相信您在网上找到的 RegEx 可以做任何重要的事情,这一点很重要。有许多不好的或构造不佳的 RegEx 用于验证等事情。通常,如果您遇到无法理解的 RegEx,并且无法弄清楚它是如何工作的,最好找到另一个您确实理解的解决方案。

关于javascript - 验证用户在 Google-Sheets 上输入的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45554020/

相关文章:

javascript - 在 es6 中有没有一种方法可以从 Error 继承并且在堆栈跟踪中没有构造函数?

javascript - PHP/HTML 模式警报

html - 尝试使用 appscripts 将多个文件上传到 Google 云端硬盘

javascript - Google 可视化查询和表格 - 未返回简单电子表格的正确行

google-sheets - 指向特定工作表的超链接

javascript - 重置功能不适用于 JavaScript 游戏

javascript - 检查嵌套键是否存在,即使未定义

javascript - 在许多不同的表格(google-sheets)中使用来自一个 Google Script 的函数

javascript - 在哪里/如何设置循环增量并仅在找到条件时更新数组?

javascript - Google Sheets 脚本 - 排序速度极慢