我有以下变量赋值
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");
}
}
}
根据我的阅读,警报已经使用了正确的语法
答案 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-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,您无法理解,并且无法弄清楚它是如何工作的,最好找到您理解的其他解决方案。