2011-01-21 14 views
-1

私の正規表現スキルは改善が必要です。だから、誰かが私を助けることができたかもしれません。年/カレンダーの週の正規表現

背景:私は、ユーザーが日付を入力する代わりに年/週 - 組み合わせを入力できるTextBoxを持っています。私はサーバサイドでそれを日付インスタンス(その週の最後の日)に変換しています。今私はこれをRegularExpressionValidatorで検証する必要があります。

フォーマット:模範的なフォーマットは wは2010年のための10w32とカレンダーの週の32桁できた場合-insentiveです。 weeknumberは1と53 他の有効な例の間でなければなりません:

99w02 -> 1999 week 2 
2W53 -> 2002 week 53 
2001w1 -> 2001 week 1 

は、事前にありがとうございます。

答えて

2

どの程度

\d{1,4}[wW](\d|([0-4]\d)|(5[0123])) 

? (もちろん、適切にエスケープされています)。

説明:

  • 1-4数字
  • WまたはW
  • 一桁...
  • いずれ...または最初は0-4となるか否かを二桁第二のことをそれが可能だ任意の数字
  • ...または0に続く5、1、2または3

でありますオルタネーション構造のグループ分けは不要です。これもうまくいくでしょう:

\d{1,4}[wW](\d|[0-4]\d|5[0123]) 

...テストしてみてください。

これは完全にテストされていません。ユニットテストはあなたの友人であり、注意深い精査が必要です。

最初に^を使用し、最後に$を使用して、正規表現を強制的に文字列全体に一致させる必要があります。

^\d{1,4}[wW](\d|[0-4]\d|5[0123])$ 
+0

まず、ありがとうございます。しかし、f。 '5w16'と他のすべての有効なフォーマットです。 http://www.nvcc.edu/home/drodgers/ceu/resources/test_regexp.aspおよびASP.Net-RegularExpressionValidatorでチェックされています。 –

+0

@Tim:修正済み - '{1-4}'は '{1,4} ' –

+0

だったはずです。どうもありがとうございました。 –