c#同じフィールドで2つのバリデーターを使用する
-
06-07-2019 - |
質問
自分で作成していないフォームを変更しようとして問題が発生しました。
フォームには日付値のasp:inputフィールドがあり、requiredFieldValとrangeValによってチェックされます。 rangeValのタイプは「日付」に設定されています。および最小値2000-01-01:最大値3000-01-01
今、ユーザーが「20000101」の形式で日付を入力できるように追加しようとしています。つまり、"-"なし。
整数型とmin、max値を持つ別のrangeValを追加して、両方を同じValidationGroupに入れようとしましたが、うまくいきませんでした。
日付入力フィールドでユーザーが両方(どちらか一方)の形式を使用できるようにするにはどうすればよいですか。
事前に感謝します!
解決
範囲バリデータの代わりに正規表現バリデータを使用できます。私は正規表現に少しさびていますが、ここで何かを見つけることができると確信しています。
http://www.regular-expressions.info/
日付ページへのリンクは次のとおりです。
http://www.regular-expressions.info/dates.html
これを試して、うまくいくと思います。そうでない場合はお知らせください。修正に取り組みます:
((19|20)\d\d[- /.](0[1-9]|1[012])[-/.](0[1-9]|[12][0-9]|3[01])|((19|20)\d\d(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])))
別の投稿により、この正規表現は2月31日などの無効な日付を検証しません。この場合、正規表現バリデーターを継承する検証クラスを作成し、EvaluateIsValidメソッドをオーバーライドして確認します実際の日付です。これにより、クライアント側で行われるほとんどの検証が可能になり、バックアップはサーバーレベルになり、いずれにしてもセカンダリ検証を行う必要があります。
他のヒント
複数の検証コントロールを使用して単一のコントロールを検証する場合、すべての検証コントロールに合格する必要があります。
(Kevinが指摘するように)正規表現を使用できますが、必要な検証(値が有効な DateTime
オブジェクトであり、指定された範囲内にあることを確認する)をきれいに行うことは困難です。
独自のを作成することをお勧めしますCustomValidator コントロールを使用し、それを使用して値を検証します。