javascript - 使用 RegExp 验证胸罩尺寸(美国、欧盟、日本、澳大利亚)
问题描述
我想检查输入是否是有效的胸罩测量值。在美国,胸罩尺寸用偶数 28-48 和字母 AI、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 = $("#form_input").val("");
var bust = input.match(/[\d\.]+|\D+/g);
var vol = bust[0];
var band = bust[1];
我可以写一个很长的测试条件:
if ((vol > 28 && vol < 48) && band == "AAA" || band == "AA" || band == "A" || band == "B" || etc.) { //一些代码
} 其他 { 错误信息" }```
如何缩短它并使用正则表达式执行上述操作?
解决方案
替代方案的模式有点长,但是如果缺少某些内容或匹配太多,您可以轻松调整范围。
您可以首先使用test检查模式是否匹配。要获取波段和 vol 匹配项,一种选择是从匹配项中提取数字或大写字符,因为存在匹配项,例如 for90C
和 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 或范围 EI|
或者(?:[6-9][05]|1[01][05])
匹配从 60 - 115 脚背 5(?:AA?|[BC]|DD?|[E-I])
匹配 AA、A、B、C DD、D 或范围 EI|
或者[A-I](?:[6-9][05]|1[01][05])
以 5 为步长匹配范围 AI 和数字 60 - 115|
或者(?:[68]|1[02468]|2[0246])
以 2 为步长匹配 6 - 26(?:AA?|[BC]|DD?|[E-I])
匹配 AA、A、B、C、DD、D 或范围 EI
)
关闭交替$
字符串结束
const pattern = /^(?:(?: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]))$/;
const str = `28A
28AA
30B
34AA
36DDDD
D70
I115
A70
H80
6AA
26I
`;
str.split('\n').forEach(s => {
if (pattern.test(s)) {
console.log(`Match: ${s}`);
let vol = s.match(/\d+/)[0];
let band = s.match(/[A-Z]+/)[0];
console.log(`vol: ${vol}`);
console.log(`band: ${band}`);
console.log("---------------------------------------");
}
})
推荐阅读
- html - Web 组件向 HTML5 页面发送消息时出错
- python-3.x - Pandas 中的 SQL 选择和分组依据
- algorithm - 是否存在一个集合的压缩表示,以便可以确定 2 个或多个表示的交集是否具有非零计数?
- linux - 如何计算 Prometheus 中的 CPU 利用率?
- c - 为什么我没有得到正确的输出
- c++ - 我有错误 dowhile 循环不起作用
- node.js - sls 离线云端命令给出错误 webpack 插件找不到配置文件... webpack.config.js
- regex - 多个可能的字符串输入的正则表达式公式验证
- scala - Peano 数字类型级实现适用于类但不适用于特征
- tensorflow - 使用 tf.keras.layers.Embedding 时使用 TF-TRT 失败