在 java 中使用 String.matches 中的正则表达式来匹配日期格式
Using Regex in String.matches in java to match a date format
根据 dd/mm/yyyy.
格式验证给定日期
有效 = 1
无效 = -1
示例 1:
输入= 12/06/1987
输出=1
示例 2:
输入= 1987 年 3 月 1 日
输出=-1
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CheckDateFormat {
public static void main(String[] args) {
String s1="29/02/2006";
getvalues(s1);
}
public static void getvalues(String s1) {
if(s1.matches("[0-9]{2}[/][0-9]{2}[/][0-9]{4}"))
{
SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
sdf.setLenient(false);
try {
Date d1=sdf.parse(s1);
System.out.println(1);
} catch (ParseException e) {
//e.printStackTrace();//Always going to catch block
System.out.println(-1);
}
}
else
System.out.println(-1);
}
}
代码的问题是它总是 returns -1。
它总是进入 catch 块并给出 ParseException。
正则表达式有问题吗?
您不需要正则表达式。如果你得到 ParseException
你可以 return -1
否则你 return 1
:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CheckDateFormat {
public static void main(String[] args) {
String s1="29/02/2006";
System.out.println(getvalues(s1));
}
public static int getvalues(String s1) {
SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
sdf.setLenient(false);
try {
Date d1=sdf.parse(s1);
System.out.println(1);
} catch (ParseException e) {
return -1;
}
return 1;
}
}
问题出在这一行:
sdf.setLenient(false);
和这个日期:
String s1="29/02/2006";
因为 2006
不是闰年 使您的日期无效并且 lenient 设置为 false 日期解析调用失败并抛出 ParseException
.
如果您注释掉 sdf.setLenient(false);
行,问题将得到解决:
或使用有效日期:
String s1="29/02/2008";
由于 2008
是闰年,因此 2 月 29 日成为有效日期。
由于以下行而引发异常。把它评论掉。
sdf.setLenient(假);
由于2006年不是闰年,使用String s1="29/02/2006";
会抛出解析异常。
尝试使用其他日期它会正常工作。
根据 dd/mm/yyyy.
格式验证给定日期
有效 = 1
无效 = -1
示例 1:
输入= 12/06/1987
输出=1
示例 2:
输入= 1987 年 3 月 1 日
输出=-1
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CheckDateFormat {
public static void main(String[] args) {
String s1="29/02/2006";
getvalues(s1);
}
public static void getvalues(String s1) {
if(s1.matches("[0-9]{2}[/][0-9]{2}[/][0-9]{4}"))
{
SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
sdf.setLenient(false);
try {
Date d1=sdf.parse(s1);
System.out.println(1);
} catch (ParseException e) {
//e.printStackTrace();//Always going to catch block
System.out.println(-1);
}
}
else
System.out.println(-1);
}
}
代码的问题是它总是 returns -1。
它总是进入 catch 块并给出 ParseException。
正则表达式有问题吗?
您不需要正则表达式。如果你得到 ParseException
你可以 return -1
否则你 return 1
:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CheckDateFormat {
public static void main(String[] args) {
String s1="29/02/2006";
System.out.println(getvalues(s1));
}
public static int getvalues(String s1) {
SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
sdf.setLenient(false);
try {
Date d1=sdf.parse(s1);
System.out.println(1);
} catch (ParseException e) {
return -1;
}
return 1;
}
}
问题出在这一行:
sdf.setLenient(false);
和这个日期:
String s1="29/02/2006";
因为 2006
不是闰年 使您的日期无效并且 lenient 设置为 false 日期解析调用失败并抛出 ParseException
.
如果您注释掉 sdf.setLenient(false);
行,问题将得到解决:
或使用有效日期:
String s1="29/02/2008";
由于 2008
是闰年,因此 2 月 29 日成为有效日期。
由于以下行而引发异常。把它评论掉。
sdf.setLenient(假);
由于2006年不是闰年,使用String s1="29/02/2006";
会抛出解析异常。
尝试使用其他日期它会正常工作。