cn.buli_home.utils.common.Validator Maven / Gradle / Ivy
package cn.buli_home.utils.common;
import cn.buli_home.utils.constant.RegexConstant;
import cn.buli_home.utils.date.DateUtils;
import java.time.Year;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 字段验证器
*/
public class Validator {
/**
* 生日
*/
public final static Pattern BIRTHDAY = Pattern.compile(RegexConstant.BIRTHDAY);
/**
* 验证是否为生日
* 只支持以下几种格式:
*
* - yyyyMMdd
* - yyyy-MM-dd
* - yyyy/MM/dd
* - yyyy.MM.dd
* - yyyy年MM月dd日
*
*
* @param value 值
* @return 是否为生日
*/
public static boolean isBirthday(CharSequence value) {
final Matcher matcher = BIRTHDAY.matcher(value);
if (matcher.find()) {
int year = Integer.parseInt(matcher.group(1));
int month = Integer.parseInt(matcher.group(3));
int day = Integer.parseInt(matcher.group(5));
return isBirthday(year, month, day);
}
return false;
}
/**
* 验证是否为生日
*
* @param year 年,从1900年开始计算
* @param month 月,从1开始计数
* @param day 日,从1开始计数
* @return 是否为生日
*/
public static boolean isBirthday(int year, int month, int day) {
// 验证年
int thisYear = NumberUtils.parseInt(DateUtils.format(new Date(), "yyyy"));
if (year < 1900 || year > thisYear) {
return false;
}
// 验证月
if (month < 1 || month > 12) {
return false;
}
// 验证日
if (day < 1 || day > 31) {
return false;
}
// 检查几个特殊月的最大天数
if (day == 31 && (month == 4 || month == 6 || month == 9 || month == 11)) {
return false;
}
if (month == 2) {
// 在2月,非闰年最大28,闰年最大29
return day < 29 || (day == 29 && Year.isLeap(year));
}
return true;
}
}