Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用RegExp验证文胸尺寸(美国、欧盟、日本、澳大利亚)_Javascript_Regex_Validation - Fatal编程技术网

Javascript 使用RegExp验证文胸尺寸(美国、欧盟、日本、澳大利亚)

Javascript 使用RegExp验证文胸尺寸(美国、欧盟、日本、澳大利亚),javascript,regex,validation,Javascript,Regex,Validation,我想检查输入是否为有效的bra测量值。在美国,胸罩尺码是用偶数28-48和字母a-I、AAA、AA、DD、DDD、HH或HHH书写的。欧盟、日本和澳大利亚使用不同的数字和模式,例如90C C90和DD6 -我想将字母和数字分开,检查字母是否介于A-I或AA、AAA、DD、DDD、HH或HHH之间,数字是否为28-48(仅偶数)、60-115(增量为5,因此为65、70、75等)或6-28偶数 var input=$(“#形式输入”).val(“”) var-bust=input.match(/[

我想检查输入是否为有效的bra测量值。在美国,胸罩尺码是用偶数28-48和字母a-I、AAA、AA、DD、DDD、HH或HHH书写的。欧盟、日本和澳大利亚使用不同的数字和模式,例如90C C90和DD6

-我想将字母和数字分开,检查字母是否介于A-I或AA、AAA、DD、DDD、HH或HHH之间,数字是否为28-48(仅偶数)、60-115(增量为5,因此为65、70、75等)或6-28偶数

var input=$(“#形式输入”).val(“”)

var-bust=input.match(/[\d\.]+\d+/g)

var vol=bust[0]

var band=bust[1]

我可以编写一个长测试条件:

如果((vol>28&&vol<48)&&band==“AAA”| band==“AA”| band==“A”| band==“B”|等){//一些代码

}else{错误消息}```

我如何缩短这个时间并使用regex执行上述操作

^(((([0-4])(0|2|4|6|8))|(6|8))|(((6|7|8|9)(0|5))|(1[01][05])))((AAA)|(AA)|(DD)|(DDD)|(HH)|(HHH)|[A-I])$
证明所有有效尺寸匹配,而所有
100_464
样本无效尺寸不匹配:

const validNumbers=数组
.from({length:22},({,i)=>6+(i*2))
.concat(数组.from({length:12},(u,i)=>60+(i*5));
常数validLetters=[
‘A’、‘B’、‘C’、‘D’、‘E’、‘F’、‘G’、‘H’、‘I’,
“AAA”、“AA”、“DD”、“DDD”、“HH”、“HHH”
];
常量validSizes=validNumber.map((数字)=>validLetters
.map((字母)=>数字+字母))
.flat();
const invalidNumbers=数组
.from({length:1_000},(_,i)=>i)
.filter((n)=>!validNumber.包括(n))
const invalidLetters='abcdefghijklmnopqrstuvxyz'。拆分(“”)
.map((字母)=>Array.from({length:4},({,i)=>letter.repeat(i+1)))
.flat();
const invalidSizes=invalidNumbers.map((number)=>invalidLetters
.map((字母)=>数字+字母))
.flat();
常量正则表达式=/^((([0-4])(0 | 2 | 4 | 6 | 8))|(((6 | 7 | 8 | 9)(0 | 5))|(1[01][05])((AAA |(AA)|(DD)|(DDD)|(HH)|(HHH)|[A-I])/;
const false positives=invalizes.filter((大小)=>regex.test(大小));
log({false-positives});

console.log({validSizes:validSizes.map((size)=>({size,isValid:regex.test(size)}));
这是一个有点长的替代模式,但是如果缺少或匹配太多,您可以轻松调整范围

您可以首先使用检查模式是否匹配。要获取波段和音量匹配,一个选项是从匹配中提取数字或大写字符,因为存在匹配项,例如
90C
C90

^(?:(?:28|3[02468]|4[02468])(?:AA?|[BC]|D{1,4}|[E-I])|(?:[6-9][05]|1[01][05])(?:AA?|[BC]|DD?|[E-I])|[A-I](?:[6-9][05]|1[01][05])|(?:[68]|1[02468]|2[0246])(?:AA?|[BC]|DD?|[E-I]))$
解释

  • ^
    字符串的开头
  • (?:
    备选方案的非捕获组
    • (?:28 | 3[02468]| 4[02468])
      按2步从28到48进行匹配
    • (?:AA?|[BC]| D{1,4}|[E-I])
      匹配AA,A,B,C,1-4乘以D或范围E-I
    • |
    • (?:[6-9][05]| 1[01][05])
      从60-115脚背到5脚背的比赛
    • (?:AA?|[BC]| DD?|[E-I])
      匹配AA、A、B、C DD、D或范围E-I
    • |
    • [A-I](?:[6-9][05]| 1[01][05])
      以5步为单位匹配范围A-I和数字60-115
    • |
    • (?:[68]| 1[02468]| 2[0246])
      按步骤2从6到26进行匹配
    • (?:AA?|[BC]| DD?|[E-I])
      匹配AA、A、B、C、DD、D或范围E-I
  • 关闭交替
  • $
    字符串结尾

[代码>警民警司警司图案:<代码>警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司警司模式::::((((:::::::::::::::::::::::::[[[[3.4[3.4.4.4}}[E-I[E-I[E-I[E-I[E-I[E-I[E-I[E-I[E-I[E-I[E-I,[E-I[E-I[E-I[[E-I[E-I[E-I,,,[E-I)))在场在场在场在场在场在场在场在场在场在场在场在场$/; 常量str=`28A 28AA 30B 34AA 36DDDD D70 I115 A70 H80 6AA 26I `; str.split('\n')。forEach(s=>{ if(型式试验){ log(`Match:${s}`); 设vol=s.match(/\d+/)[0]; 设频带=s.match(/[A-Z]+/)[0]; log(`vol:${vol}`); log(`band:${band}`); console.log(“---------------------------------------------------”; }
})
var input=$(“#form_input”).val(“”)
因此您将jquery对象存储到input中,并将输入值设置为空字符串。这会引发错误,因为jquery对象没有匹配()方法。
/(\d{2})([a-I]| a{2,3}d{2,3})/H{2,3}/
不适用于
28AA
)([A-I]| A{2,3}| D{2,3}| H{2,3})/
/(28 |[34][02468])([A-I]| A{2,3}| D{2,3}{H{2,3})/<代码>既不为<代码> 34 AAA < /代码>。令人印象深刻!我还必须考虑到用户输入将被保留,以便它可以是90C或C90。因此,大多数ReGEX都必须报废。对此的反馈表示欢迎:谢谢您的详细信息。非常需要。解释会有很大帮助。我会给出更新,以便大家都能看到完成的PROD。uct。也许再过一周左右。