我不是编写正则表达式的专家,所以需要你的帮助。我想以“dd-MMM-yyyy”格式验证日期,即 2012 年 6 月 7 日。我在 asp.net 中使用 RegularExpressionValidator。
任何人都可以帮我提供表达吗?
感谢您分享您的时间。
使用 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
正则表达式,当天没有前导零。
^\d{1,2}-[a-zA-Z]{3}-\d{4}$
用当天的前导零更新正则表达式。
^\d{2}-[a-zA-Z]{3}-\d{4}$
它不是正则表达式,但您可以使用内置DateTime.TryParseExact函数来验证您的日期时间字符串
DateTime dateTime;
string toValidate = "01-Feb-2000";
bool isStringValid = DateTime.TryParseExact(
toValidate,
"dd-MMM-yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out dateTime);
公认的解决方案允许将“00”作为日期,因此这里有一个解决方法:
^(([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' 不会通过,而 'Dec' 会通过。您可能希望在测试之前将正则表达式字符串和测试字符串转换为小写(如果您的应用程序允许)。
2.这不会捕捉到不存在的日子,如2月30日、6月31日等。
"\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
另一个想法是尝试这个(类似于 user1441894 的想法):
var x = DateTime.Parse("30-Feb").GetDateTimeFormats();
我昨天学会了使用它(用于不同的目的)。所以试着抓住这个语句来处理日期的有效性/无效性:)
"^(([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}))$"
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
}
}