2011-07-11 22 views
5

私は正規表現と非常に新しいものではないんだけど、私は今のところ私の問題のための適切な表現を見つけることができませんでした:のJavaScript正規表現

私は、ユーザーのタイプにその文字列を確認したいですテキストフィールド 文字列はセミコロンで区切られた1つ以上の用語で構成されていなければなりません。

  1. 最初の数で構成され、例えば、ハイフンに続いて、再度数が続く2つの用語の種類が実際あり

    1-4または22-44

  2. 第2項は数字とカンマが0回以上繰り返して構成されます。 1,2または4,5,6

すべての用語は、セミコロンで締結する必要があります。

有効な入力は次のようになります。1-4;5,6,7;9-11;または1,3;4-6;8,9,10;

私は非常に多くのバリエーションを試してみたが、今のところ解決策を見つけることができませんでした。私の問題は、この入力文字列が任意の数の用語で構成されることです。私はこれをそれぞれOR演算子と "lookahead"で解決しようとしましたが、成功しませんでした。

ご協力いただければ幸いです。

おかげで多くの、 enne

+4

あなたの例があなたの説明と一致しません。最初の "有効な入力"には最後のセミコロンがありません。 "22-44"は "数字の後にハイフン..."とはなりません。 –

+0

それは非常に真のKerrekです。セミコロンを追加し、 "数字"を "数字"に変更しました。発言をありがとう。 – enne87

答えて

4

この正規表現は、あなたが必要なものを行う必要があります。

/^(?:[0-9]+-[0-9]+;|[0-9]+(?:,[0-9]+)*;)+$/ 
+0

これは、 '; 1-4; 5,6,7; 9-11'を端末 ';'なしの彼の例では受け付けません。 – Vache

+0

@Vache - その例は、 "すべての用語はセミコロンで終わらなければならない"という前の行のステートメントと一致しないので、OPの要件はあいまいであることに注意してください。 – nnnnnn

+0

良い点。 **すべての用語はセミコロンで終わらなければならないとの記述がありました**ので、これには最終的な用語が含まれていると仮定しました。 – EdoDodo

2

EDITED:最初の質問は、今ではターミネータとしてそれらを示し、セミコロン区切りだったに見えました。ここ

は、1つ以上のタームの配列である、各用語が数値または数値の範囲またはカンマで区切られた番号のリストのいずれかであるセミコロンによって末端:非付

/^(\d+(-\d+|(,\d+)*)?;)+$/ 

を-capturingグループ

/^(?:\d+(?:-\d+|(?:,\d+)*)?;)+$/ 
+0

非常にクールなレイ、ありがとう:)残念ながら、私は受け入れられた答えとして1つの答えを設定することができます:/ – enne87

1

私のテイク..

^(?:\d+-\d+(?:;|$)|(?:\d+(?:[,;]|$))+)+$

+0

悪くはない、最後の用語の最後のセミコロンだけがありません。ご協力いただきありがとうございます。 – enne87