我使用以下代码来验证在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$";
说出无效的转义序列。
任何人都可以弄清楚我错在哪里或以其他方式验证日期表达吗?
答案 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();
}