使用RegEx在时间格式化的单元格上进行数据验证

时间:2016-04-07 14:24:11

标签: regex google-sheets

我需要验证在单元格中输入的时间。但是单元格格式为日期格式,因为我稍后需要它来提取小时和分钟。

如果单元格格式为纯文本,我的RegEx将完美检查,但如果我将其设置为“time”或“date”或“hh:MM”,我在电子表格中收到错误:“参数1需要文本,但是0.52154是数字类型,不能强制为文本类型“(从法语大概翻译,对不起)。

我的公式:

=REGEXMATCH(F5,"([0-1][0-9]:[0-5][0-9]:[0-5][0-9])?([0-9]:[0-5][0-9]:[0-5][0-9])?([0-1][0-9]:[0-5][0-9])?([0-9]:[0-5][0-9])?")

有解决方法吗?

3 个答案:

答案 0 :(得分:1)

您可以使用公式将数字转换为文本:

=REGEXMATCH(TEXT(F5,"hh:mm:ss"),regex)

hh:mm:ss将数字转换为模仿时间格式的正确标记。

要确保输入的时间是数字格式,您还应该使用ISNUMBER函数:

=and(ISNUMBER(F5),REGEXMATCH(TEXT(F5,"hh:mm:ss"),regex)
如果输入了文字,

将返回false

答案 1 :(得分:0)

值为:

  

函数REGEXMATCH参数1需要文本值。但'123'是一个数字,不能强制为文本。

您收到错误,因为正则表达式无法应用于文本以外的值。将值转换为文本并使用REGEXMATCH

=REGEXMATCH(TEXT(F5,""),"([0-1][0-9]:[0-5][0-9]:[0-5][0-9])?([0-9]:[0-5][0-9]:[0-5][0-9])?([0-1][0-9]:[0-5][0-9])?([0-9]:[0-5][0-9])?")
            ^^^^^^^^^^^

答案 2 :(得分:0)

再次搜索和测试,我遇到了= TEXT(A1,“pattern”)公式的变体:= TO_TEXT()

我的最终公式: =REGEXMATCH(TO_TEXT(E20);"([0-1][0-9]:[0-5][0-9]:[0-5][0-9])|([0-9]:[0-5][0-9]:[0-5][0-9])|([0-1][0-9]:[0-5][0-9])|([0-9]:[0-5][0-9])")

我必须深入了解TO_TEXT()和TEXT()之间的区别......

问题绝对是您必须格式化函数的模式参数的方式。如果输入12h45之类的东西,= TEXT(E20;“hh:mm:ss”)模式将返回00:00:00,正则表达式将被评估为TRUE。