2017-08-07 56 views
1

我有以下变量赋值验证用户输入的时间在谷歌表

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); 
    } 
} 

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

我在互联网上发现了上述情况,但我从未见过这种理解时间的方式。有人可以解释我发生了什么,或者将我链接到关于上述语法如何工作的文章?

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

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

} 

从我读的警报已经在正确的语法

回答

3

什么你找到被称为“正则表达式“(RegEx或RegExp),它是一种匹配字符串的语法,它非常强大且可能非常复杂。有很长的一本书专门针对RegEx,所以我会试着给你一个关于这个如何工作的简要概述,而不会陷入许多具体的细节中,而这些细节需要完全解释。

见正则表达式维基百科这里: https://en.wikipedia.org/wiki/Regular_expression

参见在JavaScript这里使用正则表达式文档: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

要清楚,在你的例子正则表达式的部分是语句:

/^([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]之后的问号使其成为可选项,因此您可以在凌晨2:00或02:00之间匹配2:00

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

包含^和$特殊字符可确保字符串中没有额外的字符。

最后需要注意的是,由于RegEx语法可能相当复杂且难以阅读,因此不要盲目信任您在网上找到的RegEx,以便做任何重要的事情。有许多糟糕的或建设不佳的RegEx,用于验证等事情。一般来说,如果您遇到RegEx您无法理解,并且无法弄清楚它是如何工作的,最好找到您理解的另一个解决方案。