web-dev-qa-db-ja.com

日付を検証するC#正規表現?

テキストボックスに入力された日付を検証しようとしています。テキストボックスにxx/xx/xxxxの入力を強制する入力マスクがあります。正規表現バリデーターを使用して、正しい日付が入力されるようにしています。私は基本的にRegExにはまったく熟練していません。同僚はこれをインターネットで見つけましたが、何をしているのか本当にわかりません。

これは正しいですか?複雑すぎるようです...

(^((((0[1-9])|([1-2][0-9])|(3[0-1]))|([1-9]))\x2F(((0[1-9])|(1[0-2]))|([1-9]))\x2F(([0-9]{2})|(((19)|([2]([0]{1})))([0-9]{2}))))$)

誰かが本質的に私が必要としていることをするより複雑でない表現を知っていますか?

14
Hcabnettek

_System.DateTime_名前空間 で利用可能なメソッドの1つを使用しないのはなぜですか? DateTime.TryParse()edit:を使用できます検証を完了するには、DateTime.TryParseExact() がおそらく正しい提案です)。

36
Donut

DateTime.TryParseExact

DateTime dt;

bool isValid = DateTime.TryParseExact(
    "08/30/2009",
    "MM/dd/yyyy",
    CultureInfo.InvariantCulture,
    DateTimeStyles.None,
    out dt);
24
dtb

これは、日付形式dd/mm/yyyyに使用する正しい正規表現になります

^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$
7
Radha

上記の正規表現は、dd/mm/yyyy形式に適しています。式は

(^((((0[1-9])|([1-2][0-9])|(3[0-1]))|([1-9]))\x2F(((0[1-9])|(1[0-2]))|([1-9]))\x2F(([0-9]{2})|(((19)|([2]([0]{1})))([0-9]{2}))))$)
3
vishal

ケッテンバッハに問題があった。彼の同僚は正規表現の使用を提案しました。ケッテンバッハには2つの問題があった。

他の人が言ったように、DateTime.TryParseまたはDateTime.TryParseExactカスタムバリデーターを使用して、正規表現である悪夢を自分で保存します:)

3
Sk93

別の方法として、RegularExpressionValidatorの代わりにCompareValidatorを使用できます。こんなふうになります:

<asp:CompareValidator ID="CompareValidator2" runat="server" ControlToValidate="txtIssueDate" ErrorMessage="Invalid Date Format" Type="Date" Operator="DataTypeCheck" Display="Dynamic" Text="*" ForeColor="Red" ValidationGroup="valGroup1"></asp:CompareValidator>

3
Yogi

最後の答えは実際には正しい方法です。使用する DateTime.TryParse

例:

DateTime dt;
if(DateTime.TryParse(Textbox1.Text,out dt))
{
 Label1.Text = "Invalid date format";
}
1
wwd

これは正解ではありませんが、DateTime.Parseまたは DateTime.TryParse を使用して日付が正しいことを確認できませんでしたか?

または、DateTimeコントロールを使用して、DateTime以外のデータを入力できないようにします。このテーマについては、JavaScriptがたくさんあります。

0
Blue Toque
([0][1-9]|[1][0-9|][2][0-9]|[3][0-1])\/([0][1-9]|[1][0-2])\/[1-2][0-9][0-9][0-9]

dd/mm/yyyy(年は1000から2999まで可能)

または

(([0] [1-9] | [2] [0-9] | [3] [0-1] | [1-9] | [1] [0-9])/([0] [ 1-9] | [1] [0-2] | [1-9])/([1-2] [0-9] [0-9] [0-9] | [0-9] [0 -9]))

これには、d/m/yyが含まれます(例:1/12/82)

CustomValidatorを使用し、ServerValidateメソッドをオーバーライドして、TryParse!

0
Muhammedh