求 能验证 yyyy-MM-dd HH:mm:ss 格式的 正则表达式 ! 牛人请进 !

billwindows 2008-02-28 10:30:28
我在做swing进行验证时需要一个yyyy-MM-dd HH:mm:ss 格式的正则表达式,网上有很多版本但发现都不对,比如



/**
* 判断输入的字符串是否满足时间格式 : yyyy-MM-dd HH:mm:ss
* @param patternString 需要验证的字符串
* @return 合法返回 true ; 不合法返回false
*/
public static boolean isTimeLegal(String patternString) {

Pattern a=Pattern.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s((([0-1][0-9])|(2?[0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$");
Matcher b=a.matcher(patternString);
if(b.matches()) {
return true;
} else {
return false;
}
}





中的,如果输入为 2008-8-9 0:0:0 还是会通过,因为后面有很多业务在里面,必须进行分、秒、小时....等的验证,所以必须满足2008-08-09 00:00:00 格式的,在线等,先谢谢了!
...全文
1470 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
billwindows 2008-02-28
  • 打赏
  • 举报
回复
顺便说一下,最后的正则表达式 还是下面的比较好 ~oo~



/**
* 判断输入的字符串是否满足时间格式 : yyyy-MM-dd HH:mm:ss
* @param patternString 需要验证的字符串
* @return 合法返回 true ; 不合法返回false
*/
public static boolean isTimeLegal(String patternString) {

Pattern a=Pattern.compile("^((((1[6-9]|[2-9]\\d)\\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\\d|3[01]))|(((1[6-9]|[2-9]\\d)\\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\\d|30))|(((1[6-9]|[2-9]\\d)\\d{2})-0?2-(0?[1-9]|1\\d|2[0-8]))|(((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-)) (20|21|22|23|[0-1]?\\d):[0-5]?\\d:[0-5]?\\d$");

Matcher b=a.matcher(patternString);
if(b.matches()) {
return true;
} else {
return false;
}
}

billwindows 2008-02-28
  • 打赏
  • 举报
回复
找到解决 方案了! 就是野蛮了点, 让 SimpleDateFormat 类 按照我要求的格式先去转换成Date,在 转成String 就成了,试了下,好用 挖哈哈 ~oo~
billwindows 2008-02-28
  • 打赏
  • 举报
回复
倒 ~ !-_-
yuanjun_xf 2008-02-28
  • 打赏
  • 举报
回复
顶下
yami251139 2008-02-28
  • 打赏
  • 举报
回复
直接拷可能有點問題的。。。因為這個|的問題。。。
你最好打遍。。。 我是直接在這里面打的。。
billwindows 2008-02-28
  • 打赏
  • 举报
回复
对不起,java2000_net,我不知道 无满意节贴 还会 扣分数, 我上个 发的帖子 写的 不清楚 ,所以就直接 结了, 等在写个看着舒服的 发现分数不够了
billwindows 2008-02-28
  • 打赏
  • 举报
回复
楼上的 哥们, 我输入 2008-09-09 00:00:00 怎么都不要用哇 ~ 倒了, 我把你那段 拷贝 到我那边 里面还有很多 空格, 我去了之后 就输 什么 都不好用内 !-_-
老紫竹 2008-02-28
  • 打赏
  • 举报
回复
晕,日期难验证,时间简单,你不会组合一下啊!我想你自己都应该会的,加在日期验证的后面就行了。
2楼的我看应该可以用。

而且,你既然无满意结贴,何必再开一个。 那个又不是其他人不能回复!

呵呵!你随意了!
allan0527 2008-02-28
  • 打赏
  • 举报
回复
关注中...最好是能还能验证时间的合法性,比如润年的2月有29号等等
Harry_hua 2008-02-28
  • 打赏
  • 举报
回复
格式: 2006-9-18 09:00:00

^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29)) ([0-1][0-9]|[2][0-3]):([0-5][0-9]):([0-5][0-9])$

这个可以看看!
Harry_hua 2008-02-28
  • 打赏
  • 举报
回复
//判断日期:年-月-日(2005.12.25、2005年12月2号、2005/10/23,2005-11-28)、年-月(05年12月)、月-日(12-30、10/30、10.30、10月30号)
private static System.Text.RegularExpressions.Regex reg_isDate=new System.Text.RegularExpressions.Regex ("^(?:(31)(\\D)(0?[13578]|1[02])\\2|(29|30)(\\D)(0?[13-9]|1[0-2])\\5|(0?[1-9]|1\\d|2[0-8])(\\D)(0?[1-9]|1[0-2])\\8)((?:1[6-9]|[2-9]\\d)?\\d{2})$|^(29)(\\D)(0?2)\\12((?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:16|[2468][048]|[3579][26])00)$");
/// <summary>
/// 验证时间格式:12:23:34或00:00:1或8:3:42
/// </summary>
private static System.Text.RegularExpressions.Regex reg_isTime=new Regex(@"^((0?\d|1[0-9]|2[0-3])|((0?\d|1[0-9]|2[0-3]):(0?\d|[0-5]\d)(:(0?\d|[0-5]\d)){0,1}))$");



/// <summary>
/// 判断日期:年-月-日(2005.12.25、2005年12月2号、2005/10/23,2005-11-28)、年-月(05年12月)、月-日(12-30、10/30、10.30、10月30号)
/// </summary>
/// <param name="expression"></param>
/// <returns></returns>
public static bool IsDate(ref string expression)
{
string text=expression;
bool existDay=true;//当日期格式为05年12月时使用。
//格式转换======================
int indexExist=text.IndexOf('-');
if(indexExist<0)
{
indexExist=text.IndexOf('/');
if(indexExist>0)
{
text=text.Replace('/','-');
}// 日期以‘/’为分隔符,将其转换为‘-’
else
{
indexExist=text.IndexOf(".");
if(indexExist>0)
{
text=text.Replace(".","-");
}// 日期以‘.’为分隔符,将其转换为‘-’
else
{
indexExist=text.IndexOf("月");
if(indexExist>0)
{
existDay=text.IndexOf("号")>0||text.IndexOf("日")>0?true:false;

text=text.Replace('年','-');
text=text.Replace('月','-');
text=text.Replace("日","");
text=text.Replace("号","");
}// 日期以‘年,月,日’为分隔符,将其转换为‘-’
}//else 日期不是以‘.’为分隔符
}//else 日期不是以‘/’为分隔符
}//else 日期不是以‘-’为分隔符

//====================格式转换

int index=text.IndexOf('-');
if(index>0)
{
if(!existDay)//2005年12月或05年12月
{
text=text+System.DateTime.Now.Day.ToString();
index=text.IndexOf('-');
}
else if(text.Length<6) //只有月和日,添加系统日期的年份
{
text=System.DateTime.Now.Year.ToString()+"-"+text;
index=text.IndexOf('-');
}

//将年月日换为日月年,供判断
string year=text.Substring(0,index);
text=text.Remove(0,index);
string day=text.Substring(text.LastIndexOf('-')+1);
text=text.Remove(text.LastIndexOf('-')+1,day.Length);
text=day+text+year;
}//if index
if(reg_isDate.Match(text).Success)
{
expression=text;
return true;
}
else
{
return false;
}
}//public

/// <summary>
/// 验证时间格式:12:23:34或00:00:1或8:3:42,12点23分23秒,12点,12点23分
/// </summary>
/// <param name="expression"></param>
/// <returns></returns>
public static bool IsTime(ref string expression)
{
string text=expression;
if(text.IndexOf(":")<0)
{
int fenIndex=text.IndexOf("时");
int dianIndex=text.IndexOf("点");
int index=fenIndex>0?fenIndex:dianIndex;
if(index>0&&text.Length>index+1)
{
text=text.Replace("时",":");
text=text.Replace("点",":");
//判断分的格式
if(text.IndexOf("分")>0)
{
if(text.Length>(text.IndexOf("分")+1))
{
text=text.Replace("分",":");
//判断秒的格式
if(text.IndexOf("秒")>0&&text.Length<=(text.IndexOf("秒")+1))
{
text=text.Replace("秒","");
}
else//有“秒”的值,但没有“秒”这个字符
{
text+="time Error";
}
}
else//没有秒
{
text=text.Replace("分","");
}
}
else //有“分”的值,但没有“分”这个字符
{
text+="time Error";
}
}// if 时
else
{
text=text.Replace("时","");
text=text.Replace("点","");
}// else if index
}//if text.IndexOf(":")
if(reg_isTime.Match(text).Success)
{
expression=text;
return true;
}
else
{
return false;
}
}
这也是我在网上找的你看看吧!

yami251139 2008-02-28
  • 打赏
  • 举报
回复
額 試過了應該可以。。
你在java里面String出來的話:前的斜杠要去掉。。。
yami251139 2008-02-28
  • 打赏
  • 举报
回复
我倒。。。
那我幫你+下hh:mm:ss的好了。。。
^((0[0-9]|1[0-9]|2[0-3])\:([0-5][0-9])\:([0-5][0-9]))$
范圍是00:00----23:59
沒試過。。。有問題再說了。。。
billwindows 2008-02-28
  • 打赏
  • 举报
回复
感谢 java2000_net , 但你给的 那个 只是满足 yyyy-MM-dd 的 , 不是 yyyy-MM-dd HH:mm:ss的哇 . 气死了,就这点分数了.

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧