在 javascript 中使用正则表达式验证字符串

Verify a string with regex in javascript

我需要接受一个字符串来定义用户将使用的邮政编码数量。

示例:

我需要验证该字符串。
我用它来验证但它没有用

/(\d{4}(:|,){0,1}\d{4})/gm

您需要在找到匹配项后展开这些匹配项。我假设字符串之前已经过验证,如果不使用 if (/^\d+(?:[:,]\d+)*$/.test(s)) { ... }.

let s = '1010:1015,1019,1025:1027';
const chunks = s.replace(/(\d+):(\d+)/g, (_,,) =>
    Array.from(
        new Array(Number()-Number()), 
        (x, i) => 
            i + Number())
    .join(",")).split(',');
console.log(chunks);

Array.from(new Array(Number()-Number()), (x, i) => i + Number()) 部分生成了使用 /(\d+):(\d+)/g 正则表达式获得的第 1 组和第 2 组值之间的数字范围。

以匹配#### 或#### 的基本短语开头:####

\d{4}(:\d{4})?

然后扩展它以匹配 comma-separated 列表中的任意数量:

\d{4}(:\d{4})?(,\d{4}(:\d{4})?)*

最后,用 ^$ 括起来以验证整行。

^(\d{4}(:\d{4})?)(,(\d{4}(:\d{4})?))*$

尽管我试图简化正则表达式,但这里有一个真正的 验证器 用于您的特定字符串。
看起来有点长,因为它匹配 range 1000→1200: 1(?:[01]\d{2}|200)

/^1(?:[01]\d{2}|200)(?::1(?:[01]\d{2}|200)(?!:)|,1(?:[01]\d{2}|200))*$/g

Regex101.com example and description

无范围
正则表达式更简单,但它也可以匹配任何四位数字,如 00009999:

/^\d{4}(?::\d{4}(?!:)|,\d{4})*$/g

Regex101.com example and description

最简单 - 但不能用作验证器
更简单的解决方案是

/^\d{4}(?:[,:]\d{4})*$/g

Regex101.com example and description
但如您所见,它将匹配 许多错误的输入 ,例如无效的 1000:1005:1020(两个 :