- - PR -
ValidationExpressionのコントロールで日付チェック。。。
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-08-29 17:38
.NET Framework 開発者ガイド
例 : 日付形式の変更 Regex.Replace メソッドを使用して mm/dd/yy 形式の日付を dd-mm-yy 形式の日付に置換するコード例を次に示します。 例 Visual Basic コードのコピー Function MDYToDMY(input As String) As String Return Regex.Replace(input, _ "\b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{2,4})\b", _ "${day}-${month}-${year}") End Function C# コードのコピー String MDYToDMY(String input) { return Regex.Replace(input, "\\b(?<month>\\d{1,2})/(?<day>\\d{1,2})/(?<year>\\d{2,4})\\b", "${day}-${month}-${year}"); } ページ:http://msdn2.microsoft.com/ja-jp/library/c8e9427h.aspx | ||||||||||||
|
投稿日時: 2006-10-17 01:02
まゆみです。
こんばんは。 私も日付のチェックをValidationExpressionのコントロールで 行おうとしています。 しかしうまくいかず にしざき様のコードを参考にさせて頂きました。 引用: -------------------------------------------------------------------------------- 未検証ですが、 日付チェックの正規表現 -------------------------------------------------------------------------------- そこでわたしは、年の部分を2006年から9999年と範囲指定を行いたいので下記の様に書いてみたのですがうまくいきませんでした。 --------------------------------------------------------------------------- ^(?:0[1-9]|1[0123456789]|2[0123456789]3[0123456789]/ (?:(?:0?[1-9]|1[0-2])/(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])/(?:29|30)|(?:0?[13578]|1[02])/31)|(?:\\\\\\\\\\\\\\\\d{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)/0?2/29)$ --------------------------------------------------------------------------- 年の部分を200年から9999年というような範囲指定はできないのでしょうか? どうかアドバイスの程を宜しくお願いします。 | ||||||||||||
|
投稿日時: 2006-10-17 10:45
こんにちは。
まずはクライアント側でのチェックなのか、サーバ側でのチェックなのかを明確 にしましょう。スレ主さんの書き方だと「サーバ側の検証コントロール」としか書い てありませんが、スレッドの流れ的にはクライアントでのチェックの事を指してい るようです。そして「ある程度しか、クライアント側での検証は無理」という結論が 出ています。 にしざきさんの正規表現を否定するわけではありませんが(ココ重要)、個人的 には RegularExpressionValidator によるチェックは日付チェックには向か ないのではないかと思います。私ならば Jitta さんと同じように
とすると思います(上段がサーバ側でのチェック、下段がクライアント側でのチェ ック)。そのときは CustomValidator クラスを使用します。 #その結果 JavaScript だらけになってそれはそれで困ったりするわけですが(笑) 余談ですが、このようにして他の方の質問に自分の質問をつなげてしまうのは、 元質問主さん的にはあまりいいものではないかもしれませんね。あと答える側も 以前の投稿を飛ばして読まないといけませんし。 新規スレッドを作成するときに「参照元記事URL」の欄にココの URL を書いて新 規スレッドを立てたほうが良かったと思います。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||||||||||
|
投稿日時: 2006-10-17 11:39
先読み | ||||||||||||
|
投稿日時: 2006-10-17 11:44
[クライアントサイドのチェックについて]
TypeをDateにしたRangeValidatorじゃダメなんでしょうか? [サーバサイドでのチェックについて] 私の場合以前どっかで例外を発生させる処理は結構遅いというのを聞いたことがあって、 ASP.NET2.0の場合はDateTime.TryParseを、ASP.NET1.1でVBの場合はIsDateを使うようにしています。 | ||||||||||||
|
投稿日時: 2006-10-17 21:20
単純に、簡単に考えましょうよ。 まず、日付の形式として正しいか、チェックする。その後、年だけ取り出し、2006〜9999 の範囲か、確認する。 これじゃまずいですか? で、Web の場合、.NET Framework での正規表現の書式と、JavaScript での正規表現の書式が違うから云々と、書いてありますよね。なので、CustomValidator をお勧めします。 クライアント側では、try〜catch で括って、Date 型に変換。サーバ側では、DateTime 型に TryParse。その後、年を範囲チェック。 例外を発生させる処理は重いのですが、発生しなければ重くないので、どちらの割合が多いかということを事前に調査しておけばよろしいかと。 _________________ | ||||||||||||
|
投稿日時: 2006-10-17 23:41
誤解があるようですが、だったら、IsDate もダメですよ。 IsDate は System.DateTime.Parse の例外処理を行っています。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |