2016-11-10 16 views
0

正規表現を使って、このパターンと一致させることができます。以下のフォーマットで入力を受け入れる必要があります。この検証ロジックを実装するには、正規表現が必要です。 私は正規表現のための正規表現

/(^(([0-9]{5,6}[,])+[0-9]{5,6})$)|(^(([0-9]{1,5}\*[,])+[0-9]{1,5}\*)$)|(^(([0-9]{5,6}[,])+[0-9]{1,5}\*)$)|(^(([0-9]{1,5}\*[,])+[0-9]{1,5})$)/ 

次使用してみました。しかし、それはすべてのシナリオに一致していません。続い

は、可能な入力

  1. 1123 *、2133 *、123 * 1 *
  2. 213433,123453,123 *
  3. 123333,123623,678123,12323、
  4. 1123であります*、123445,166788,123333、..........

条件 - 数値の長さは5または6です。入力はコンマで区切る必要があります。入力が*(ワイルドカード検索)を持っている場合、最大長さが5より大きいEX 123123することはできません(不可)*

+1

パターンを説明できますか? – Barmar

+1

これはあなたが1時間前に尋ねたのと同じ質問ではありませんか? http://stackoverflow.com/questions/40535382/regex-for-number-series-validation – Barmar

+0

要件をマイナス - 私はそれらを追加しました – mplungjan

答えて

1

私は、私は完全に正規表現マッチングパターンの要件を理解していないが、ここで予備的なアプローチがあります。 [一致する]

  • 私はあなたを理解したよう

    数字は長さ5または6を持つことができますし、マッチングパターンは、この記述に合う数字の任意の量をキャプチャすることができるはず。この部分では、アスタリスク文字(*)が数字列に含まれていないと仮定します。

変数inputには、値として文字列213433,123453,123*が割り当てられているとします。次に...

input.match(/\d{5,6}(?!\*)/g); 

は、このように変数inputの部分をキャプチャする必要があります。試しにキャラクタセットを使用していたことがわかりました(、つまり[0-9]部分)。 (?!\*)部分は、5桁または6桁のシーケンスの後にアスタリスク文字がないことを確認するために使用されます。注:アスタリスクをエスケープする必要があります。

  • 入力にアスタリスク文字が含まれている場合、一致する部分は5文字以内にすることができます。 (私は正しくプロンプトを理解していることを願っています)!このために、次のRegExpパターンは、(私が実行した)2つのテストで(まったく徹底的に)実行されました。注:このパターンでは、アスタリスク文字と数字シーケンス(、つまり、一致/取り込み)が保持されます。

ここではinput変数は次の正規表現のマッチパターンをテストする目的のために、文字列1123*,2133*,123*,1*に割り当てられていると仮定することができます。

input.match(/(\d+\*){1,5}/g); 

私は間違っていない場合は、2つの試合のパターンは条件付きでシンプルOR(|)演算子を使って組み合わせることができます。

input.match(/\d{5,6}(?!\*)|(\d+\*){1,5}/g); 

うまくいけば、少し助けてください。最後のテストとして、1123*,2133*,123*,1*,123333,123623,678123,12323という文字列にinput変数を代入してみましょう(この例では、入力例1と3を連結しています)。

["1123*", "2133*", "123*", "1*", "123333", "123623", "678123", "12323"] 

あなたが任意のワイルドカード文字(*)なしで一致を検索したい場合は、次のように、あなたは、単に式を変更できます:

a.match(/\d{5,6}(?!\*)|(\d+\*){1,5}/g).map(val => val.replace('*', '')); 
を次に、直接上記のステートメントを実行すると、配列を返します

...

["1123, "2133", "123", "1", "123333", "123623", "678123", "12323"] 
1

私は質問を理解していればこれは、非常に複雑なようではありません。

var x = ['1123*,2133*,123*,1*', '213433,123453,123*', '123333,123623,678123,12323', '1123*,123445,166788,123333']; 
 

 
var re = /\d{5,6}|\d{1,5}\*/g; 
 

 
console.log(x.map(s => s.match(re)));