Momo1199 2013-07-02 05:26 采纳率: 0%
浏览 2560

验证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;
  }              
}
  • 写回答

1条回答 默认 最新

  • loFataMer 2013-07-02 08:41
    关注
    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();                    
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式