Какое регулярное выражение для формата даты дд \ мм \ гггг? - PullRequest
4 голосов
/ 27 ноября 2011

Какое регулярное выражение для формата даты дд \ мм \ гггг? Я не могу найти регулярное выражение для этого формата?

Ответы [ 7 ]

8 голосов
/ 27 ноября 2011

По моему мнению, лучше проверять форматирование с помощью регулярного выражения, но проверять правильность с помощью кода (Java, в вашем случае). Было бы нелепо многословно пытаться проверять такие вещи, как разные дни в месяце и високосные годы, с помощью регулярного выражения.

Я предлагаю разобрать дату с помощью регулярного выражения, например ([0-9]{2})\\([0-9]{2})\\([0-9]{4}), затем извлечь каждый фрагмент (dd, mm и yyyy соответственно) и попытаться создать из них объект java.util.Date.

Обратите внимание на следующее:

  • Даты обычно пишутся с косой чертой (/), а не с обратной косой чертой (\),
  • В строках Java, чтобы написать символ обратной косой черты в регулярном выражении, вам фактически нужно будет написать \\\\ для двух символов обратной косой черты (\\). В Java-строках для записи обратной косой черты нам нужен escape-символ (который снова является \).
7 голосов
/ 30 декабря 2015

регулярное выражение для шаблона дд / мм / гггг

    String regex = "^([0-2][0-9]||3[0-1])/(0[0-9]||1[0-2])/([0-9][0-9])?[0-9][0-9]$";
3 голосов
/ 30 июля 2013
        /**
         * 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 голос
/ 11 апреля 2018

Если вы хотите использовать фиксированную версию:

  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 в ДД / ММ / ГГГГ

1 голос
/ 02 апреля 2018

Я сделал это для формата DDMMYY

([0-2]?[0-2][0-9]|3[0-1])(0?0[1-9]|1[0-2])([0-9][0-9])
1 голос
/ 05 сентября 2017

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

Приведенное выше регулярное выражение будет проверять первые 2 символа в диапазоне от 0 до 31, затем следующая группа должна содержать символы в диапазоне от 0 до 12, а в следующей группе - год в диапазоне от 1900 до 2099

Это прекрасно работает для меня

1 голос
/ 05 июня 2017

Я попробовал это ^[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"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...