2016-11-24 4 views
1

コンセプト正規表現

Example: 0232699980132 
0 232 699980132 
0 - segment 1 
232 - segment 2 (length = 3) 
699980132 - segment 3 (length = 9) 
Length of segment 2 and 3 should be 12 or 13 

Thの実施例3つのセグメントを有し、第一のセグメントは0であり得るか、または24または0024. 第二セグメント232であるか、またはその缶123または3434.第3のセグメントは任意のものとすることができます数が、第2および第3のセグメントの組み合わせは、Iが

/[?:0|24|0024]{1,3}[232|123|3434]{3,4}[0-9]{9}$/ 

通報しようとした12または13

なければならない:9 minにそれが動作している私は第3セグメントを修正する場合、私私はまた、グループを作ってみましたが、それはすべての

/[?:0|24|0024]{1,3}([232|123|3434]{3,4}[0-9])(?=.{14}$)$/ 

をいじりされた12または13

に2番目と3番目のセグメントを制限する必要が助言してください。

https://jsfiddle.net/ohz7nnz7/

+0

( '、グループ化構築物を試します。 ..) '、文字クラス' [...] 'の代わりに。 ['^(0 | 24 | 0024)(232 | 123 | 3434)([0-9] {9})$'](https://regex101.com/r/JBMh4t/1) –

+0

は平均です、各セグメント2の値は別々の構成ですか? – Mac

+0

セグメント2とセグメント3の長さが12または13であるかどうかを計算する方法は? – Mac

答えて

1

私は2種類のパターン、テスト用と抽出するための別のものを使用することをお勧め。

var patt_test = /^(0024|24|0)(232[0-9]{9,10}|123[0-9]{9,10}|3434[0-9]{9})$/; 

これは、修飾文字列にのみ一致することを確認します。詳細:文字列の

  • ^ -start
  • (0024|24|0) - グループ1(あなたの質問のようではない文字クラス!)002424または0が(((?:00)?24|0)として短縮することができる)
  • (232[0-9]{9,10}|123[0-9]{9,10}|3434[0-9]{9})一致 - グループ2捕捉:
    • 232[0-9]{9,10} - 232数、次いで9または10桁の数字
    • 123[0-9]{9,10}から123数、次いで9または10桁の数字
    • 3434[0-9]{9}から3434数、次いで9数字
  • $ - 文字列の末尾。

文字列がこのように検証されると、我々が3つの部分を抽出するために進むことがあります。

var patt_extract = /^(0024|24|0)(232|123|3434)(\d{9,10})$/; 

詳細:

  • ^(0024|24|0)から002424、または0を開始時文字列の
  • (232|123|3434) - グループ2のキャプチャ232123又は3434リテラル文字列
  • (\d{9,10}) - グループ3:任意の9~10桁
  • $ - 文字列の末尾

var number = []; 
 
number[0] = "0232699980132"; // this should be true as starts with 0 
 
number[1] = "008973343430145"; // false 
 
number[2] = "24232667870167"; // true 
 
number[3] = "0024232656880187"; // true 
 
number[4] = "024232623432190"; // this should be false because middle segment 24 is not allowed 
 
number[5] = "02326568801878"; // this should be true 
 

 
console.clear(); 
 
var patt_test = /^(0024|24|0)(232[0-9]{9,10}|123[0-9]{9,10}|3434[0-9]{9})$/; 
 
var patt_extract = /^(0024|24|0)(232|123|3434)(\d{9,10})$/; 
 
var result = false; 
 
for(i=0; i<=(number.length-1); i++) { 
 
\t result = patt_test.test(number[i]); 
 
    if (result) { // VALIDATE THE STRING 
 
    \t var first, second, third; 
 
    \t var m = patt_extract.exec(number[i]); // EXTRACT PARTS 
 
    \t if (m) { first = m[1]; second = m[2]; third = m[3]; } 
 
    \t var str = number[i]+" -- "+result+"--"+number[i].length+"--P1:"+first+"--P2:"+second+"--P3:"+third; 
 
    \t console.log(str); 
 
    } else { 
 
    console.log(number[i]+" -- "+result+"--"+number[i].length); 
 
    } 
 
}

0

方法について:

^(?:0024|24|0)(?=(?:232|123)\d{10}$)(?=3434(?:\d{9})$) 

または

^(?:0024|24|0)(?:(?:232|123)\d{10}|3434(?:\d{9}))$ 
+0

いいえ、動作していません。 https://jsfiddle.net/ohz7nnz7/2/ – Mac

+0

セグメント2とセグメント3の長さを取得するにはどうしますか? – Mac