验证日期时间格式的正则表达式
//判断日期:年-月-日(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;
}
}