首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >验证MySQL中时间格式的有效性

验证MySQL中时间格式的有效性
EN

Stack Overflow用户
提问于 2013-09-15 04:59:10
回答 3查看 340关注 0票数 1

我已经在MySQL's date and time functions page周围寻找了很长一段时间,但是我没有找到一个函数来表明一种时间格式是否有效,例如,STR_TO_DATE函数。用户提供了一种格式,我希望接受尽可能广泛的格式。该格式稍后可以在脚本中与MySQL的STR_TO_DATE函数一起使用,该函数在失败时返回NULL (这是我希望通过在用户提供无效的时间格式时预先警告用户来避免这种情况)。我打算在临时表的帮助下以某种方式测试这些格式。

我不能使用STR_TO_DATE函数测试格式的有效性,因为传递给它的字符串值最终将由用户生成(在未来某个未定义的时间点),所以我不知道哪些字符串将传递给它。我曾希望DATE_FORMAT函数能解决我的问题,但它只是忽略了任何无效的格式说明符(例如,%Q没有任何含义,它将转换为Q)。在任何情况下都不会返回NULL,也不会产生警告。

有什么想法吗?

编辑:我能想到的唯一大致可靠的解决方案是列出所有MySQL支持的格式说明符,并将这些格式说明符与用户提供的格式中存在的所有格式说明符进行比较。

preg_match_all("/(?:(?<!%)|(?<=%%))(?:%%)*%([^%])/", $format, $matches);

正则表达式列出前面出现奇数百分号的所有字符。(这是必要的,因为百分号会自动跳转。)现在$matches[1]包含了这些字符的列表。

EN

回答 3

Stack Overflow用户

发布于 2013-09-15 07:11:55

如果您想知道字符串是否只包含有效的说明符,那么可以创建一个包含32个格式说明符的列表...

代码语言:javascript
代码运行次数:0
运行
复制
a, b, c, d, D, e, f, h, H, i, I, j, k, l, m, M, p, r, s, S, T, u, U, v, V, w, W, x, X, y, Y, %

然后遍历格式字符串并检查有效的说明符...

代码语言:javascript
代码运行次数:0
运行
复制
// pseudo-code... pretend format is an array of the format's characters
function is_valid_format(format) {
  for (x = 0; x < format.length; ++x) 
    if (format[x] == "%" &&
        (x + 1 >= format.length || 
        specifiers does not contain format[x + 1])
      return false

  return true
}

您还可以考虑提供一个预设日期格式字符串列表,供用户从中进行选择。除非用户记住了他们的格式字符串或说明符,否则我更倾向于选择日期格式字符串。

票数 0
EN

Stack Overflow用户

发布于 2013-09-15 14:20:48

使用Jquery验证引擎从客户端验证日期格式。

在PHP中,你可以验证日期( MySQL日期格式'2013-09-14‘)为

代码语言:javascript
代码运行次数:0
运行
复制
if(preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/",$date)) {
    return true;
}
票数 0
EN

Stack Overflow用户

发布于 2013-09-15 17:04:08

可以使用MySQL触发器来实现。

代码语言:javascript
代码运行次数:0
运行
复制
DELIMITER //
CREATE TRIGGER mytrigger BEFORE INSERT ON table_name
FOR EACH ROW BEGIN
IF (NEW.date_column REGEXP '^[0-9]{4}-[0-9]{2}-[0-9]{2}$') = 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Wrong Input';
END IF;
END //

DELIMITER;

这是一个示例集,它将检查格式为“YYYY-MM-DD”的用户输入,如果用户输入的格式与指定的格式不同,则将抛出消息"Wrong “。

正则表达式可以根据需要进行调整。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18806342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档