6

私は Android プログラミングが初めてで、現在アプリを開発しています。ユーザーが入力している日付が有効かどうかを検証する方法について、誰かが私を助けてくれますか?

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{
           return false;
      }        
  }
  else{
      return false;
  }              
}
4

5 に答える 5

9
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();                    
}
于 2013-07-02T02:50:57.060 に答える
3

より良い方法は、デフォルトで常に有効な日付を提供するDatePickerを表示することです。

于 2013-07-02T02:45:42.510 に答える