在edittext框中验证日期

时间:2011-10-14 07:12:17

标签: android android-widget android-edittext

我使用以下代码来验证在edittextbox中输入的日期。但是在xml文件中我已经给出了它的输入类型日期。

int i = validate(registerdate);

这是验证功能:

private int  validate(String registerdate) {

        String regEx =
            "^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d$";
          Matcher matcherObj = Pattern.compile(regEx).matcher(registerdate);
          if (matcherObj.matches())
            {
                return 1;
            }
            else
            {
                return 0;
            }
    }

它在

给我编译时错误
String regEx =
            "^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d$";

说出无效的转义序列。

任何人都可以弄清楚我错在哪里或以其他方式验证日期表达吗?

2 个答案:

答案 0 :(得分:2)

Java会将字符串中的\视为开始escape sequence。确保你使用\而不是(这样你在字符串中得到一个真正的\字符),你应该没问题。

Quick Update:正如Etienne所指出的那样,如果你真的想在RegEx本身中使用\,你需要使用\\,因为这将在字符串中产生\,这将在RegEx中产生\。

校正后的正则表达式:

String regEx ="^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\\d{2}$";

答案 1 :(得分:2)

我希望这会有所帮助:)

private Pattern pattern;
private Matcher matcher;

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


  /**
   * Validate date format with regular expression
   * @param date date address for validation
   * @return true valid date format, false invalid date format
   */
   public boolean validate(final String date){

     matcher = pattern.matcher(date);

     if(matcher.matches()){
         matcher.reset();

         if(matcher.find()){
             String day = matcher.group(1);
             String month = matcher.group(2);
             int year = Integer.parseInt(matcher.group(3));

             if (day.equals("31") && 
              (month.equals("4") || month .equals("6") || month.equals("9") ||
                      month.equals("11") || month.equals("04") || month .equals("06") ||
                      month.equals("09"))) {
                return false; // only 1,3,5,7,8,10,12 has 31 days
             } 

             else if (month.equals("2") || month.equals("02")) {
                  //leap year
                 if(year % 4==0){
                      if(day.equals("30") || day.equals("31")){
                          return false;
                      }
                      else{
                          return true;
                      }
                 }
                 else{
                     if(day.equals("29")||day.equals("30")||day.equals("31")){
                         return false;
                     }
                     else{
                         return true;
                     }
                 }
             }

             else{               
                 return true;                
             }
         }

         else{
              return false;
         }        
     }
     else{
         return false;
     }              
   }

并将这些代码放在onClick()上:

matcher = Pattern.compile(DATE_PATTERN).matcher(Birthday);

//Birthday validator
else if (!matcher.matches()) {
    Toast.makeText(getApplicationContext(), "Invalid Birthday!", Toast.LENGTH_SHORt).show();                    
}