2011-11-27 3 views
4

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

+1

Используйте ответ от http://stackoverflow.com/questions/3386520/parse-date-from-string-in-this-format-dd-mm-yyyy-to-dd-mm-yyyy и сменил косые черты (/) на двойные обратные косые черты (\\\) –

+0

@AlexTaylor Спасибо за быстрый ответ, я ищу регулярный опыт для формата даты выше, можете ли вы мне это рассказать? – Sandy

+2

Вы действительно хотите формат даты с обратной косой чертой? – EJP

ответ

7

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

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

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

  • Сроки, как правило, написаны с косой черты (/) не слэш (\),
  • В Java строки, чтобы написать обратный слэш в регулярном выражении, вы будете иметь на самом деле написать \\\\ для двух обратных косой черты (\\). В java-строках для написания обратного слэша нам нужен escape-символ (который снова является \).
+0

+1 Не должно быть '([0-9] {2}) \\\\ ([0-9] {2}) \\\\ ([0-9] {4})'? – blackcompe

+0

Да, это должно быть в строке Java. Регулярное выражение выше является типичным регулярным выражением, но если вы используете строку Java, необходимо использовать четыре разреза (см. Примечание ** (b) ** в конце моего ответа). –

+0

Вижу. Спасибо за разъяснения. – blackcompe

1
 /** 
     * 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); 
       } 
      } 
     } 
5

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

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

Я попробовал этот ^[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

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

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

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

Смежные вопросы