我需要验证在单元格中输入的时间。但是单元格格式为日期格式,因为我稍后需要它来提取小时和分钟。
如果单元格格式为纯文本,我的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])?")
有解决方法吗?
答案 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。