我不是编写正则表达式的专家,所以需要你的帮助。我希望以“dd-MMM-yyyy”格式验证日期,即2012年6月7日。我在asp.net中使用RegularExpressionValidator。
有人可以帮我提供表达吗?
感谢您分享您的时间。
答案 0 :(得分:23)
使用DatePicker可能是最好的方法。但是,由于这不是你所问的,这里有一个选项(尽管它区分大小写):
^(([0-9])|([0-2][0-9])|([3][0-1]))\-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\-\d{4}$
此外,这里还有一个可以轻松测试正则表达式的地方:http://www.regular-expressions.info/javascriptexample.html
答案 1 :(得分:6)
正则表达式在白天没有领先零。
^\d{1,2}-[a-zA-Z]{3}-\d{4}$
更新正则表达式,白天处于领先零位。
^\d{2}-[a-zA-Z]{3}-\d{4}$
答案 2 :(得分:3)
这不是正则表达式,但您可以使用内置DateTime.TryParseExact函数来验证日期时间字符串
DateTime dateTime;
string toValidate = "01-Feb-2000";
bool isStringValid = DateTime.TryParseExact(
toValidate,
"dd-MMM-yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out dateTime);
答案 3 :(得分:1)
接受的解决方案允许''作为一天,所以这是一个解决方案:
^(([1-9])|([0][1-9])|([1-2][0-9])|([3][0-1]))\-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\-\d{4}$
注释/例外:
1.了解案例敏感性问题。例如。 ' DEC' “十二月”不会过去将传递。您可能希望在测试之前将正则表达式字符串和测试字符串转换为小写(如果您的应用程序允许)。
2.这不会发现不存在的日子,如2月30日,6月31日等。
答案 4 :(得分:0)
另一个想法是尝试这个(类似于user1441894的想法):
var x = DateTime.Parse("30-Feb").GetDateTimeFormats();
昨天我学会了使用它(用于不同的目的)。所以试着抓住这个陈述来处理日期的有效性/无效性:)
答案 5 :(得分:0)
"^(([1-9]|0[1-9]|1[0-9]|2[1-9]|3[0-1])[-]([JAN|FEB|MAR|APR|MAY|JUN|JULY|AUG|SEP|OCT|NOV|DEC])[-](d{4}))$"
答案 6 :(得分:0)
"\d{4}\d{2}\d{2}|\d{2}/\d{2}/\d{4}|\d{2}.\d{2}.\d{4}|\d{2}\-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)|(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\d{2}\-\d{4}|\d{4}-\d{2}-\d{2}"
这些格式为mm.dd.yyyy
,d-MMM
,mm.dd.yyyy
答案 7 :(得分:-1)
using System.Text.RegularExpressions
private void fnValidateDateFormat(string strStartDate,string strEndDate)
{
Regex regexDt = new Regex("(^(((([1-9])|([0][1-9])|([1-2][0-9])|(30))\\-([A,a][P,p][R,r]|[J,j][U,u][N,n]|[S,s][E,e][P,p]|[N,n][O,o][V,v]))|((([1-9])|([0][1-9])|([1-2][0-9])|([3][0-1]))\\-([J,j][A,a][N,n]|[M,m][A,a][R,r]|[M,m][A,a][Y,y]|[J,j][U,u][L,l]|[A,a][U,u][G,g]|[O,o][C,c][T,t]|[D,d][E,e][C,c])))\\-[0-9]{4}$)|(^(([1-9])|([0][1-9])|([1][0-9])|([2][0-8]))\\-([F,f][E,e][B,b])\\-[0-9]{2}(([02468][1235679])|([13579][01345789]))$)|(^(([1-9])|([0][1-9])|([1][0-9])|([2][0-9]))\\-([F,f][E,e][B,b])\\-[0-9]{2}(([02468][048])|([13579][26]))$)");
Match mtStartDt = Regex.Match(strStartDate,regexDt.ToString());
Match mtEndDt = Regex.Match(strEndDate,regexDt.ToString());
if (mtStartDt.Success && mtEndDt.Success)
{
//piece of code
}
}