- PR -

ValidationExpressionのコントロールで日付チェック。。。

投稿者投稿内容
高い手
会議室デビュー日: 2006/08/29
投稿数: 5
お住まい・勤務地: 東京都
投稿日時: 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/08
投稿数: 3
投稿日時: 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/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-10-17 10:45
こんにちは。

引用:

まゆみさんの書き込み (2006-10-17 01:02) より:

私も日付のチェックをValidationExpressionのコントロールで
行おうとしています。

しかしうまくいかず
にしざき様のコードを参考にさせて頂きました。


まずはクライアント側でのチェックなのか、サーバ側でのチェックなのかを明確
にしましょう。スレ主さんの書き方だと「サーバ側の検証コントロール」としか書い
てありませんが、スレッドの流れ的にはクライアントでのチェックの事を指してい
るようです。そして「ある程度しか、クライアント側での検証は無理」という結論が
出ています。

にしざきさんの正規表現を否定するわけではありませんが(ココ重要)、個人的
には RegularExpressionValidator によるチェックは日付チェックには向か
ないのではないかと思います。私ならば Jitta さんと同じように

引用:

 私はDate.Parseメソッドにかけて例外をキャッチしています。ダメ?


引用:

 クライアント側では、JavaScriptでDate型に変換できるかどうかで検証できます。ただし、4月31日が3月1日となってしまうのが難点。これを文字列に変換し、元の文字列と比較して検証しています。


とすると思います(上段がサーバ側でのチェック、下段がクライアント側でのチェ
ック)。そのときは CustomValidator クラスを使用します。
#その結果 JavaScript だらけになってそれはそれで困ったりするわけですが(笑)

余談ですが、このようにして他の方の質問に自分の質問をつなげてしまうのは、
元質問主さん的にはあまりいいものではないかもしれませんね。あと答える側も
以前の投稿を飛ばして読まないといけませんし。
新規スレッドを作成するときに「参照元記事URL」の欄にココの URL を書いて新
規スレッドを立てたほうが良かったと思います。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
ぷさいくろう
ぬし
会議室デビュー日: 2006/08/30
投稿数: 1034
投稿日時: 2006-10-17 11:39
引用:

まゆみさんの書き込み (2006-10-17 01:02) より:
まゆみです。

そこでわたしは、年の部分を2006年から9999年と範囲指定を行いたいので下記の様に書いてみたのですがうまくいきませんでした。



先読み
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2006-10-17 11:44
[クライアントサイドのチェックについて]
TypeをDateにしたRangeValidatorじゃダメなんでしょうか?

[サーバサイドでのチェックについて]
私の場合以前どっかで例外を発生させる処理は結構遅いというのを聞いたことがあって、
ASP.NET2.0の場合はDateTime.TryParseを、ASP.NET1.1でVBの場合はIsDateを使うようにしています。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-10-17 21:20
引用:

まゆみさんの書き込み(2006-10-17 01:02)より:

私も日付のチェックをValidationExpressionのコントロールで行おうとしています。

そこでわたしは、年の部分を2006年から9999年と範囲指定を行いたいので下記の様に書いてみたのですがうまくいきませんでした。


 単純に、簡単に考えましょうよ。

 まず、日付の形式として正しいか、チェックする。その後、年だけ取り出し、2006〜9999 の範囲か、確認する。
 これじゃまずいですか?

 で、Web の場合、.NET Framework での正規表現の書式と、JavaScript での正規表現の書式が違うから云々と、書いてありますよね。なので、CustomValidator をお勧めします。
 クライアント側では、try〜catch で括って、Date 型に変換。サーバ側では、DateTime 型に TryParse。その後、年を範囲チェック。

 例外を発生させる処理は重いのですが、発生しなければ重くないので、どちらの割合が多いかということを事前に調査しておけばよろしいかと。

_________________
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-10-17 23:41
引用:

ぼのぼのさんの書き込み (2006-10-17 11:44) より:

私の場合以前どっかで例外を発生させる処理は結構遅いというのを聞いたことがあって、
ASP.NET2.0の場合はDateTime.TryParseを、ASP.NET1.1でVBの場合はIsDateを使うようにしています。


誤解があるようですが、だったら、IsDate もダメですよ。
IsDate は System.DateTime.Parse の例外処理を行っています。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)