校验是否是合法日期字符串正则

常用的ui组件不支持日月的这种形式,产品提成要用input框的形式来做,且对输入字符串是否符合时间格式做校验,写起来还是很麻烦的,记录一下以后备用。

<script>
/**
 *  校验是否是合法日期字符串
 *  支持格式:
 *      2024年4月或2024年4月28日、
 *      2024-4或2024-4-28、
 *      2024.4或2024.4.28、
 *      2024/4或2024/4/28、
 *      202404或20240428
 */
 function isValidDateFormat(dateString) {
  // 定义正则表达式以匹配不同的日期格式
  // 可能还要支持1位数的情况
  const regexes = [
    // 中文格式
    /^(\d{4})年(\d{1,2})月(\d{1,2})日$/,
    /^(\d{4})年(\d{1,2})月$/,
    // 带分隔符
    /^(\d{4})(?:[-.\/])(\d{1,2})\2(\d{1,2})$/,
    /^(\d{4})[-.\/](\d{1,2})$/,
    // 无分隔符
    /^(\d{4})(\d{1,2})(\d{1,2})?$/,
  ]

  for (const regex of regexes) {
    const match = regex.exec(dateString)
    if (match) {
      // 提取年份、月份和日(如果存在)
      const [, yearStr, monthStr, dayStr] = match
      console.log(yearStr,monthStr,dayStr)
      const year = parseInt(yearStr, 10)
      const month = parseInt(monthStr, 10)
      const day = dayStr ? parseInt(dayStr, 10) : 1 // 默认日为1,如果只有年月

      // 校验月份和日的范围
      if (month < 1 || month > 12) return false
      if (dayStr) {
        // 对于有日的格式,需要校验日是否在合理范围内
        const daysInMonth = new Date(year, month, 0).getDate() // 获取该月有多少天
        if (day < 1 || day > daysInMonth) return false
      }

      // 如果所有校验都通过,则认为是有效日期
      return true
    }
  }

  // 如果没有任何正则表达式匹配,则认为是无效日期
  return false
}
// 常规测试
console.log('常规测试')
console.log('2024年4月',isValidDateFormat('2024年4月'))
console.log('2024年4月28日',isValidDateFormat('2024年4月28日'))
console.log('2024-4-28',isValidDateFormat('2024-4-28'))
console.log('2024.4',isValidDateFormat('2024.4'))
console.log('2024.4.28',isValidDateFormat('2024.4.28'))
console.log('2024/4',isValidDateFormat('2024/4'))
console.log('2024/4/28',isValidDateFormat('2024/4/28'))
console.log('202404',isValidDateFormat('202404'))
console.log('20240428',isValidDateFormat('20240428'))

// 只有一个数字
console.log('只有一个数字')
console.log('2024年1月11日',isValidDateFormat('2024年1月11日'))
console.log('2024年11月1日',isValidDateFormat('2024年11月1日'))
console.log('2024-11-1',isValidDateFormat('2024-11-1'))
console.log('2024-1-11',isValidDateFormat('2024-1-11'))
console.log('2024-1',isValidDateFormat('2024-1'))

// // 符号混合错误
console.log('符号混合错误')
console.log('2024-4/28',isValidDateFormat('2024-4/28'))
console.log('2024.4/28',isValidDateFormat('2024-4/28'))
console.log('2024-4.28',isValidDateFormat('2024-4/28'))

// 月日不符合现实错误
console.log('月日不符合现实错误')
console.log('20241328',isValidDateFormat('20241328'))
console.log('20240028',isValidDateFormat('20240028'))
console.log('20240231',isValidDateFormat('20240231'))
console.log('20240132',isValidDateFormat('20240132'))
console.log('2011-2-31',isValidDateFormat('2011-2-31'))

</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/771553.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DVWA sql手注学习(巨详细不含sqlmap)

这篇文章主要记录学习sql注入的过程中遇到的问题已经一点学习感悟&#xff0c;过程图片会比较多&#xff0c;比较基础和详细&#xff0c;不存在看不懂哪一步的过程 文章目录 靶场介绍SQL注入 lowSQL注入 MediumSQL注入 HighSQL注入 Impossible 靶场介绍 DVWA&#xff08;Damn…

YUV 颜色编码详解

YUV 简介 YUV是被欧洲电视系统所采用的一种颜色编码方法&#xff08;属于PAL&#xff09;&#xff0c;是PAL和SECAM模拟彩色电视制式采用的颜色空间。在现代彩色电视系统中&#xff0c;通常采用三管彩色摄影机或彩色CCD摄影机进行取像&#xff0c;然后把取得的彩色图像信号经分…

硬件开发笔记(二十三):贴片电阻的类别、封装介绍,AD21导入贴片电阻原理图封装库3D模型

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140110514 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

ConsiStory:无需训练的一致性文本到图像生成技术

随着大规模文本到图像&#xff08;T2I&#xff09;扩散模型的发展&#xff0c;用户可以更自由地通过文本指导图像生成过程。然而&#xff0c;要在不同的提示中保持同一主题的视觉一致性仍然是一个挑战。现有的方法通常需要对模型进行微调或预训练&#xff0c;以教授新词汇来描述…

arthas命令使用

dashboard(线程、内存等环境概览) jvm&#xff08;JVM相关信息概览&#xff09; 1、RUNTIME&#xff08;系统运行环境JVM相关信息&#xff0c;运行时长等&#xff09; 2、CLASS-LOADING&#xff08;类加载信息&#xff09; 3、 COMPILATION&#xff08;编译信息&#xff09; 4…

论文学习——基于类型检测的动态自适应多目标优化算法

论文题目&#xff1a;Dynamic adaptive multi-objective optimization algorithm based on type detection 基于类型检测的动态自适应多目标优化算法&#xff08;Xingjuan Cai a,b, Linjie Wu a,∗, Tianhao Zhao a, Di Wu c, Wensheng Zhang d, Jinjun Chen e&#xff09;Inf…

Spring启动时,将SpringContext设置到Util中(SpringContextUtil)

场景 在Spring应用开发中&#xff0c;为简化代码或者在静态方法中获取Spring应用的上下文&#xff0c;需要把SpringContext设置到类属性上。经过对源码的分析和实践&#xff0c;使用Spring的事件监听器监听ApplicationPreparedEvent事件是最佳的方式。 通过ApplicationPrepar…

深入理解 Git `git add -p` 命令中的交互选项

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

git使用遇到的问题记录

文章目录 1. 记录以下问题*error: RPC failed; HTTP 307 curl 22 The requested URL returned error: 307* 1. 记录以下问题 error: RPC failed; HTTP 307 curl 22 The requested URL returned error: 307 第一种&#xff1a;clone的仓库地址或者账户密码发生改变&#xff1b;…

Python学习篇:Python基础知识(三)

目录 1 Python保留字 2 注释 3 行与缩进 ​编辑4 多行语句 5 输入和输出 6 变量 7 数据类型 8 类型转换 9 表达式 10 运算符 1 Python保留字 Python保留字&#xff08;也称为关键字&#xff09;是Python编程语言中预定义的、具有特殊含义的标识符。这些保留字不能用作…

商务视频推广8个增加用户转化率的技巧-华媒舍

商务视频推广是一种有效的营销策略&#xff0c;可以帮助企业吸引更多的潜在客户并增加用户转化率。我们将介绍8个提高商务视频推广效果的技巧&#xff0c;帮助您更好地利用视频来促进业务增长。 技巧一&#xff1a;制作高质量的内容 成功的商务视频推广首先要有高质量的内容。…

Web3 开发者入门手册:技能、工具和职业前景

原文&#xff1a;https://remote3.co/blog-post/how-to-become-a-web3-developer 作者&#xff1a;Paul Anderson 编译&#xff1a;TinTinLand Web3 是 2024 年科技领域最受瞩目的话题之一——Web3 令人激动的实用潜力可以跨越多个行业&#xff0c;早期采用者更有机会在未来…

iOS手机竖着拍的照片被旋转了90°的原因以及解决方案

EXIF.getData(IMG_FILE, function () { // IMG_FILE为图像数据 var orientation EXIF.getTag(this, “Orientation”); console.log(“Orientation:” orientation); // 拍照方向 }); 获取拍照方向的结果为1-8的数字&#xff1a; 注意&#xff1a;对于上面的八种方向中&a…

nginx的重定向(rewrite)

nginx的重定向&#xff08;rewrite&#xff09; location 匹配 location匹配的就是后面的URI /wordpress 192.168.60.20/wordpress location匹配的分类和优先级 1、精确匹配 location / 对字符串进行完全匹配&#xff0c;必须完全符合 2、正则匹配 ^~ 前缀匹配&#x…

ACE Studio的成功经验:从国内到全球的市场拓展

在AI技术飞速发展的今天&#xff0c;音乐创作也正经历着一场前所未有的变革。作为这一变革的前沿代表&#xff0c;ACE Studio无疑引起了广泛关注。本文将通过对时域科技创始人Joe与曲凯的对话&#xff0c;深入探讨ACE Studio的创新理念、市场定位、技术优势以及未来发展方向。 …

一个R包完成单细胞基因集富集分析 (全代码)

singleseqgset是用于单细胞RNA-seq数据的基因集富集分析的软件包。它使用简单的基础统计量&#xff08;variance inflated Wilcoxon秩和检验&#xff09;来确定不同cluster中感兴趣的基因集的富集。 Installation library(devtools) install_github("arc85/singleseqgse…

【JavaEE】多线程代码案例(2)

&#x1f38f;&#x1f38f;&#x1f38f;个人主页&#x1f38f;&#x1f38f;&#x1f38f; &#x1f38f;&#x1f38f;&#x1f38f;JavaEE专栏&#x1f38f;&#x1f38f;&#x1f38f; &#x1f38f;&#x1f38f;&#x1f38f;上一篇文章&#xff1a;多线程代码案例(1)&a…

花键参数确定的流程是怎么样的?

继续花键的话题&#xff0c;今天跟小伙伴们一同学习一下&#xff1a;渐开线花键的参数确定的一般流程及基本方法。 前面有好几篇介绍了花键的基本参数的概念&#xff0c;包括规格、模数、齿数、压力角等等。以及花键的定心方式&#xff0c;内外花键的配合方式。那么这些参数的…

基于docker轻松部署selenium grid环境

做web自动化的同学都知道selenium grid非常好用&#xff0c;但是环境配置特别麻烦&#xff0c;很多人都躺在了环境搭建。那么有没有更简单的方式呢&#xff0c;答案是肯定的&#xff0c;今天我们就用docker来完成它&#xff0c;希望对大家有帮助。 一、环境准备 准备一台 Linu…