2012-03-06 15 views
0

文字列を検証する正規表現が必要です。正規表現:コンマ区切り文字列の妥当性チェック

"", "0", "1,2", "2,3", "1,2,3" 
  1. ときに「0」が発生した場合、その後、他の数の意志​​ではない(例えば、「0,1」許可されていない)は、nの2の最小値と最大値とすることができる
  2. 数の範囲は可変です、 、
  3. "1,2,2,3"のように重複している数字は許されません。
  4. "1,3,4"が有効であるなど、シーケンスである必要はありません。
  5. 文字列はネストされていません。私たちは決してインスタンス "0"、 "1,2" "をチェックしません。
  6. nは最大10ですが、前述のように可変です。
+2

正規表現は、この問題を解決する最善の方法ではありません。 –

+0

この種のものは 'regexp'でしないでください。 – kev

+0

私は、3と4の組み合わせを除いて正規表現では比較的簡単だと思います。少なくとも、それらを組み合わせる簡単な方法はわかりません。ちなみに、私はあなたが別々にこれらの文字列をそれぞれ持っていると仮定しています。実際には二重引用符を含む文字列ではありません。あなたはあなたの質問でそれを明確にすることができますか? – KobeJohn

答えて

1

(比較的)複雑なルールをチェックする必要があるので、入力を配列に分割してオフにする方がよいでしょう:string.split(",");そしてそれを繰り返して、必要な条件をチェックしてください。

+0

私は最初にこのアプローチを実際に使用しましたが、多くのことをチェックしなければなりません(無効、0条件、重複など)。多くの文字列操作が必要です。私は、すべてのチェックを1つまたは最大で2行のコードで行うことが可能かどうか疑問に思っていました。 – px5x2

+0

コンパイル時には正規表現を[FSM]に変換することができます(ただし、上限は 'n 'であり、高いことがありますので、_all_番号の逆参照が必要です。 http://en.wikipedia.org/wiki/Finite-state_machine)。固定量のメモリーしか実装できないため、この種の問題は一般的なケースでは正規表現/ FSMでは解決できません。 –

関連する問題