验证用户在Google表格上输入的时间

时间:2017-08-07 19:02:56

标签: 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");
       }
    }

}

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

1 个答案:

答案 0 :(得分:3)

你所发现的被称为"正则表达" (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,您无法理解,并且无法弄清楚它是如何工作的,最好找到您理解的其他解决方案。