java中Js验证日期的正则表达式格式为:yyyy/MM/dd

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中Js验证日期的正则表达式格式为:yyyy/MM/dd相关的知识,希望对你有一定的参考价值。

自己在网上找的正则是:var result = date.match(/((^((1[8-9]\d2)|([2-9]\d3))(-)(10|12|0?[13578])(-)(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d2)|([2-9]\d3))(-)(11|0?[469])(-)(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d2)|([2-9]\d3))(-)(0?2)(-)(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)(-)(0?2)(-)(29)$)|(^([3579][26]00)(-)(0?2)(-)(29)$)|(^([1][89][0][48])(-)(0?2)(-)(29)$)|(^([2-9][0-9][0][48])(-)(0?2)(-)(29)$)|(^([1][89][2468][048])(-)(0?2)(-)(29)$)|(^([2-9][0-9][2468][048])(-)(0?2)(-)(29)$)|(^([1][89][13579][26])(-)(0?2)(-)(29)$)|(^([2-9][0-9][13579][26])(-)(0?2)(-)(29)$))/);
这种正则验证的是yyyy-MM-dd的我想要的是yyyy/MM/dd的,之所以把我自己的正则写出来是应为网上有的正则我复制过来会在js中报错请各位大神指点!

var result=data.match(/((^((1[8-9]\d2)|([2-9]\d3))(\/)(10|12|0?[13578])(\/)(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d2)|([2-9]\d3))(\/)(11|0?[469])(\/)(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d2)|([2-9]\d3))(\/)(0?2)(\/)(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)(\/)(0?2)(\/)(29)$)|(^([3579][26]00)(\/)(0?2)(\/)(29)$)|(^([1][89][0][48])(\/)(0?2)(\/)(29)$)|(^([2-9][0-9][0][48])(\/)(0?2)(\/)(29)$)|(^([1][89][2468][048])(\/)(0?2)(\/)(29)$)|(^([2-9][0-9][2468][048])(\/)(0?2)(\/)(29)$)|(^([1][89][13579][26])(\/)(0?2)(\/)(29)$)|(^([2-9][0-9][13579][26])(\/)(0?2)(\/)(29)$))/);
将所有的(-)改成(\/)不就得了
我很久以前好像写过一个和这差不多的正则
参考技术A 逻辑严密,代码整洁,功能强大,v587!支持!

Java里面效验日期的正则表达式

要具体的 年月日 时分秒,因为这些数据是用户输入的,用户输入随时可能超过正常的格式,比如用户输入个20131936,月份超了,天数也超了,所以我在验证的时候我需要把这个数据给打回去,求个正则表达式 ,谢谢,在线等

 public static void main(String[] args)   
       
        String checkValue = "20000431112230";  
String year = checkValue.substring(0, 4); // 获取年份
String month = checkValue.substring(4, 6); // 获取月份
        Boolean isLeap = leapYear(Integer.parseInt(year)); // 判断闰年
        System.out.println(isLeap);
        StringBuffer eL= new StringBuffer();
        String longMonth = "01030507081012"; // 31天的月份
        String fix = "([2][0-3]|[0-1][0-9]|[1-9])[0-5][0-9]([0-5][0-9]|[6][0])";
        
        
        if(isLeap && month.equals("02"))  // 针对2月份的情况 【闰年】
         eL.append("\\\\d4([1][0-2]|[0][0-9])([2][0-1]|[1-2][0-9]|[0][1-9]|[1-9])"+fix);
        else if(!isLeap && month.equals("02")) // 针对2月份的情况 【非闰年】
         eL.append("\\\\d4([1][0-2]|[0][0-9])([2][0-1]|[1-2][0-8]|[0][1-9]|[1-9])"+fix);
        else if(longMonth.contains(month)) // 31天月份
         eL.append("\\\\d4([1][0-2]|[0][0-9])([3][0-1]|[1-2][0-9]|[0][1-9]|[1-9])"+fix);
        else // 30天月份
         eL.append("\\\\d4([1][0-2]|[0][0-9])([3][0]|[1-2][0-9]|[0][1-9]|[1-9])"+fix);
        
        Pattern p = Pattern.compile(eL.toString());    
        Matcher m = p.matcher(checkValue);    
        boolean flag = m.matches();   
        if(flag )   
                 
            System.out.println("格式正确");   
           
        else  
           
            System.out.println("格式错误");   
           
  
     
public static boolean leapYear(int year) 
Boolean isLeap = false;
if (((year % 100 == 0) && (year % 400 == 0))
|| ((year % 100 != 0) && (year % 4 == 0)))
isLeap = true;
return isLeap;

参考技术A 比如 2013-11-01 12:12:12
/^(\d4)-(0\d1|1[0-2])-(0\d1|[12]\d1|3[01]) (0\d1|1\d1|2[0-3]):[0-5]\d1:([0-5]\d1)$/
20131101 121212
/^(\d4)(0\d1|1[0-2])(0\d1|[12]\d1|3[01]) (0\d1|1\d1|2[0-3])[0-5]\d1([0-5]\d1)$/
这个是可以的,我测了的。。。追问

麻烦您能帮忙解释一下吗,有点模糊。放上去可以用也得知道原理是把 ,麻烦了

追答

/^(\d4)-(0\d1|1[0-2])-(0\d1|[12]\d1|3[01]) (0\d1|1\d1|2[0-3]):[0-5]\d1:([0-5]\d1)$/
就比如这个吧,空格前面验证年份,\d表示数字字符匹配相当于[0-9]
第一个括号(\d4)表示匹配四个数字表示年份,
第二个括号(0\d1|1[0-2])表示0开头后面匹配一位数字或者1开头匹配0-2之间的数字
后面都差不多这个意思没有特别复杂的。。。

个人认为还是用
/^(\d4)-(0\d1|1[0-2])-(0\d1|[12]\d1|3[01]) (0\d1|1\d1|2[0-3]):[0-5]\d1:([0-5]\d1)$/
这种比较好
如果把中间的-去掉了的话
前面就是8位数字,有很多数据都判断不了

这样比较日期吧 反正你在后台获取这个日期是String类型的
String a="2013-11-04 15:40:12";//从前台传过来的日期
Date date = new Date(); //当前系统日期
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date t = format.parse(a);
boolean flag = t.before(date);
if(flag) System.out.print("早于今天");
else System.out.print("晚于今天");

追问

这个代码复杂度我先不说,我现在需要的是正则表达式的,你能帮帮忙,看你的能不能跑的通,你写的那个 为什么不能赋值给String 类型,编译都不过,等着要了 ,麻烦了

这个代码复杂度我先不说,我现在需要的是正则表达式的,你能帮帮忙,看你的能不能跑的通,你写的那个 为什么不能赋值给String 类型,编译都不过,等着要了 ,麻烦了

追答

你在前台通过正则表达式验证数据,如果是规范数据的话,你是不是要传到后台?在后台是通过request.getParamete("")方法来获得数据吗?是String类型的吗?还有你要比较的数据不是跟系统时间比较的吗?如果不是的话也可以先通过SimpleDateFormat转换成Date类型是java.util.Date类型。再进行比较,上面那种方法是可以通过的,你也可以直接在main方法里面测试

追问

String h ="/^(\d4)-(0\d1|1[0-2])-(0\d1|[12]\d1|3[01]) (0\d1|1\d1|2[0-3]):[0-5]\d1:([0-5]\d1)$/"; 这是你传给我的

本回答被提问者采纳
参考技术B 网上一搜一大箩.

以上是关于java中Js验证日期的正则表达式格式为:yyyy/MM/dd的主要内容,如果未能解决你的问题,请参考以下文章

dd/mm/yyyy 格式的日期正则表达式,用于 javascript 验证

用于验证日期时间格式的正则表达式(MM/DD/YYYY)[重复]

正则表达式波斯日期验证

正则表达式日期验证格式

js验证年月日(yyyy-mm-dd)格式

验证日期格式正则表达式