在 javascript 中使用正则表达式验证字符串
Verify a string with regex in javascript
我需要接受一个字符串来定义用户将使用的邮政编码数量。
示例:
- 如果用户想要使用从 1000 到 1200 的所有邮政编码
然后他会输入1000:1200
- 如果他只想用1000和1200
然后他会输入1000,12000
- 两者结合是可能的
1010:1015,1019,1025:1027
将 return [1010,1011,1012,1013,1014,1015,1019,1025,1026,1027]
我需要验证该字符串。
我用它来验证但它没有用
/(\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
无范围
正则表达式更简单,但它也可以匹配任何四位数字,如 0000
、9999
:
/^\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
(两个 :
)
我需要接受一个字符串来定义用户将使用的邮政编码数量。
示例:
- 如果用户想要使用从 1000 到 1200 的所有邮政编码
然后他会输入1000:1200
- 如果他只想用1000和1200
然后他会输入1000,12000
- 两者结合是可能的
1010:1015,1019,1025:1027
将 return[1010,1011,1012,1013,1014,1015,1019,1025,1026,1027]
我需要验证该字符串。
我用它来验证但它没有用
/(\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
无范围
正则表达式更简单,但它也可以匹配任何四位数字,如 0000
、9999
:
/^\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
(两个 :
)