概念
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
该示例具有3个段,第一个段可以是0或24或0024。 第二段是232或其罐123或3434.第三段可以是任何数字,但第二段和第三段的组合应为12或13。
我试过
/[?:0|24|0024]{1,3}[232|123|3434]{3,4}[0-9]{9}$/
问题:如果我将第3段修改为最小值9,但我必须将第2段和第3段限制为12或13,这是有效的。
我也尝试过制作小组,但它搞乱了所有
/[?:0|24|0024]{1,3}([232|123|3434]{3,4}[0-9])(?=.{14}$)$/
请告知。
答案 0 :(得分:1)
我建议使用2种不同的模式,一种用于测试,另一种用于提取。
var patt_test = /^(0024|24|0)(232[0-9]{9,10}|123[0-9]{9,10}|3434[0-9]{9})$/;
这个将确保我们只匹配限定字符串。详细说明:
^
-start of string (0024|24|0)
- 匹配0024
,24
或0
的第1组(不是您问题中的字符类!)(可缩短为((?: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)
- 0024
,24
或0
(232|123|3434)
- 第2组捕获232
,123
或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++) {
result = patt_test.test(number[i]);
if (result) { // VALIDATE THE STRING
var first, second, third;
var m = patt_extract.exec(number[i]); // EXTRACT PARTS
if (m) { first = m[1]; second = m[2]; third = m[3]; }
var str = number[i]+" -- "+result+"--"+number[i].length+"--P1:"+first+"--P2:"+second+"--P3:"+third;
console.log(str);
} else {
console.log(number[i]+" -- "+result+"--"+number[i].length);
}
}
&#13;
答案 1 :(得分:0)
怎么样:
^(?:0024|24|0)(?=(?:232|123)\d{10}$)(?=3434(?:\d{9})$)
或
^(?:0024|24|0)(?:(?:232|123)\d{10}|3434(?:\d{9}))$