私は正規表現を書く専門家ではないので、あなたの助けが必要です。「dd-MMM-yyyy」形式、つまり 07-Jun-2012 で日付を検証したい。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 日など、存在しない日は検出されません。
"^(([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}))$"
さらに別のアイデアは、これを試すことです(user1441894のアイデアに似ています):
var x = DateTime.Parse("30-Feb").GetDateTimeFormats();
昨日、これを使うことを学びました(別の目的で)。したがって、このステートメントを試して、日付の有効性/無効性に対処してください:)
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
}
}