テキストボックスに入力された日付を検証しようとしています。テキストボックスに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}))))$)
誰かが本質的に私が必要としていることをするより複雑でない表現を知っていますか?
_System.DateTime
_名前空間 で利用可能なメソッドの1つを使用しないのはなぜですか? DateTime.TryParse()
(edit:を使用できます検証を完了するには、DateTime.TryParseExact()
がおそらく正しい提案です)。
DateTime dt;
bool isValid = DateTime.TryParseExact(
"08/30/2009",
"MM/dd/yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out dt);
これは、日付形式dd/mm/yyyyに使用する正しい正規表現になります
^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$
上記の正規表現は、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}))))$)
ケッテンバッハに問題があった。彼の同僚は正規表現の使用を提案しました。ケッテンバッハには2つの問題があった。
他の人が言ったように、DateTime.TryParse
またはDateTime.TryParseExact
カスタムバリデーターを使用して、正規表現である悪夢を自分で保存します:)
別の方法として、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>
最後の答えは実際には正しい方法です。使用する DateTime.TryParse
。
例:
DateTime dt;
if(DateTime.TryParse(Textbox1.Text,out dt))
{
Label1.Text = "Invalid date format";
}
これは正解ではありませんが、DateTime.Parse
または DateTime.TryParse
を使用して日付が正しいことを確認できませんでしたか?
または、DateTime
コントロールを使用して、DateTime以外のデータを入力できないようにします。このテーマについては、JavaScriptがたくさんあります。
([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!