我有以下变量赋值
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/