javascript - 具有某些条件的数字范围的正则表达式
问题描述
我正在使用 javascript 创建一个项目。我想在我的项目中实现正则表达式以进行验证。验证就像增加订单的数字范围这是我的要求。
1-56 --------Pass
15 -----------Pass
1-5-9 --------Fail
asd988 -------Fail
50-49 ------- Fail
我正在尝试使用这个
^[0-9]+-[0-9]+$
它不适合我
更新:更改是用户可以添加多个值,例如:
1-56,56,3
解决方案
您可以匹配由单个或两个数字组成的字符串,捕获数字并在有两个数字时比较它们。仅在不匹配或第一个数字小于第二个数字时才返回 false:
const rx = /^(\d+)(?:-(\d+))?$/
const isValid = (string) => {
const m = rx.exec(string);
if (m && !m[2]) {
return true;
} else if (m && parseInt(m[2], 10) > parseInt(m[1], 10)) {
return true;
} else {
return false;
}
}
const strs = ['1-56,56,3', '1-56', '15', '1-5-9', 'asd988', '50-49'];
for (let s of strs) {
console.log( s, s.split(",").every(x => isValid(x)) )
}
正/^(\d+)(?:-(\d+))?$/
则表达式匹配:
^
- 字符串的开始(\d+)
- 第一组:一位或多位数字(?:-(\d+))?
- 一个可选的非捕获组匹配 1 或 0 次出现-
- 一个-
字符(\d+)
- 第 2 组:一位或多位数字 -$
- 字符串结尾。
推荐阅读
- linux - 谁在按下 ctrl+c、tty 驱动程序或 shell 时将 SIGINT 发送到前台进程
- android - 如何使用 Fabric 的 Answers 或 Google Analytics 获取当前 Android 用户的事件计数?
- java - 在 Android Studio 中限制 EditText 数值的最佳方法是什么?
- github-actions - GitHub 模板存储库中的徽章,将引用克隆的构建状态,而不是模板存储库的构建状态
- python - 如何在没有 FRM/MSG 的情况下发送 SMS
- percentage - 交叉表中占总数的百分比
- javascript - 使用括号语法将项目插入数组不会影响长度?
- postgresql - 带有 docker compose 的 postgres 给出了 FATAL: role "root" does not exist 错误
- excel - 从数组到工作表的数据
- stripe-payments - Stripe Proration - 预付费用?