日期格式dd\mm\yyyy的正则表达式是什么?

4

日期格式dd\mm\yyyy的正则表达式是什么?我无法找到这个格式的正则表达式。


1
使用https://dev59.com/h0_Ta4cB1Zd3GeqPBHyj的答案,并将斜杠(/)更改为双反斜杠(\\\)。 - Alex Taylor
@AlexTaylor 感谢您的快速回复,我正在寻找上述日期格式的正则表达式,请问您能告诉我吗? - Sandy
2
你真的想要带反斜杠的日期格式吗? - user207421
8个回答

9

正则表达式用于匹配 dd/mm/yyyy 格式的模式。

    String regex = "^([0-2][0-9]||3[0-1])/(0[0-9]||1[0-2])/([0-9][0-9])?[0-9][0-9]$";

8
在我看来,最好使用正则表达式验证格式,但使用代码(在您的情况下为 Java)验证有效性。使用正则表达式来检查不同的月份和闰年等事项会非常复杂。
我建议使用像 ([0-9]{2})\\([0-9]{2})\\([0-9]{4}) 这样的正则表达式解析日期,然后分别提取每个部分(dd, mm, 和 yyyy)并尝试创建一个java.util.Date对象.
请注意以下内容:
  • 日期通常使用正斜杠(/)而不是反斜杠(\)编写,
  • 在Java字符串中,为了在正则表达式中写入反斜杠字符,需要使用两个反斜杠字符进行转义(\\\\)。 在 Java 字符串中为了写反斜杠,我们需要转义字符(又是一个\)。

+1 不应该是 ([0-9]{2})\\\\([0-9]{2})\\\\([0-9]{4}) 吗? - blackcompe
是的,在Java字符串中应该这样做。上面的正则表达式是一种通用的正则表达式,但如果在Java字符串中使用,则需要使用四个斜杠(请参见我的答案末尾的注释 **(b)**)。 - Jon Newmuis
3
使用这个正则表达式会导致接受无效的日期,例如"99\99\9999"。 - HieuHT

3
        /**
         * Created with IntelliJ IDEA.
         * User: S34N
         * Date: 2013/07/30
         * Time: 8:21 AM
         * To change this template use File | Settings | File Templates.
         */



        //Import the required classes/packages
        import javax.swing.*;
        import java.text.DateFormat;
        import java.text.SimpleDateFormat;
        import java.util.Date;

        public class dateInputScan {

            public static void main(String args[]) {

                dateInputScan run = new dateInputScan();
                run.dateInputScan();
            }

            public void dateInputScan() {

                //Instantiating variables
                String lvarStrDateOfTransaction = null;
                DateFormat formatter = null;
                Date lvarObjDateOfTransaction = null;

                //Use one of the following date formats.
                lvarStrDateOfTransaction = "29/07/2013";
                //lvarStrDateOfTransaction = "29-07-2013";
                //lvarStrDateOfTransaction = "20130729";
                //lvarStrDateOfTransaction = "2013-07-29";
                //lvarStrDateOfTransaction = "29/07/2013";

                //You can also add your own regex (Regular Expression)
                if (lvarStrDateOfTransaction.matches("([0-9]{2})/([0-9]{2})/([0-9]{4})")) {
                    formatter = new SimpleDateFormat("dd/MM/yyyy");
                } else if (lvarStrDateOfTransaction.matches("([0-9]{2})-([0-9]{2})-([0-9]{4})")) {
                    formatter = new SimpleDateFormat("dd-MM-yyyy");
                } else if (lvarStrDateOfTransaction.matches("([0-9]{4})([0-9]{2})([0-9]{2})")) {
                    formatter = new SimpleDateFormat("yyyyMMdd");
                } else if (lvarStrDateOfTransaction.matches("([0-9]{4})-([0-9]{2})-([0-9]{2})")) {
                    formatter = new SimpleDateFormat("yyyy-MM-dd");
                } else if (lvarStrDateOfTransaction.matches("([0-9]{4})/([0-9]{2})/([0-9]{2})")) {
                    formatter = new SimpleDateFormat("yyyy/MM/dd");
                }

                try {
                    lvarObjDateOfTransaction = formatter.parse(lvarStrDateOfTransaction);
                    JOptionPane.showMessageDialog(null, "Date: " + lvarObjDateOfTransaction);

                } catch (Exception ex) {    //Catch the Exception in case the format is not found.
                    JOptionPane.showMessageDialog(null, ex);
                }
            }
        }

1

([0-2][0-9]||3[0-1])\\(0[0-9]||1[0-2])\\((19|20)\d\d)

以上正则表达式将验证: 第1、2个字符在0-31的范围内 接下来的一组必须包含0-12范围内的字符 然后下一组包含1900-2099年的年份

对我来说它完美地工作。


1

我已经为格式DDMMYY完成了这个任务。

([0-2]?[0-2][0-9]|3[0-1])(0?0[1-9]|1[0-2])([0-9][0-9])

1

如果你想使用修复版本,请使用:

  private static final String FIXED_DATE_PATTERN = 
      "(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/((19|20)\\d\\d)";

这将强制日期和月份的值为零,并且不允许像00/12/2018或07/00/2018这样的输入格式在DD/MM/YYYY中。


1
我尝试了这个^[0-3]{1}[0-9]{1}/[0-1]{1}[1-2]{1}/[1-9]{1}[0-9]{3}$,它有效。
String dateRegEx="^[0-3]{1}[0-9]{1}/[0-1]{1}[1-2]{1}/[1-9]{1}[0-9]{3}$";
System.out.println(Pattern.matches(dateRegEx, "01/01/1990"));

0

对于 "dd/MM/yyyy",您可以使用:

(0[1-9]|1[0-9]|2[0-9]|3[0-1]|[1-9])/(0[1-9]|1[0-2]|[1-9])/([0-9]{4})
  • 日(dd):可以接受1或01、9或09(直到31日)

  • 月(MM):可以接受1或01(直到12月)

  • 年(yyyy):可以接受4位数字


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接