javascript - 验证打印正则表达式的页面范围
问题描述
我需要验证页面范围的正则表达式。(例如,打印自定义页面)
目前,我已经尝试过这个表达
/^(?!([ \d]*-){2})\d+(?: *[-,] *\d+)*$/
它应该接受像
1, 3, 6-9
1-5, 5
6, 9
它不应该接受像
,5
5-,9
9-5,
2,6-
10-1
解决方案
那时,我不会为新手难以阅读的正则表达式而烦恼。使用纯 js 的无正则表达式但冗长的解决方案:
- 我们用逗号分隔
- 我们修剪所有尾随空格
- 我们检查每个部分是否有效
- 当找到一个虚假范围时,我们返回 false
演示:
const isNumeric = input => !isNaN(input) // you may also check if the value is a nonzero positive integer
const isOrdered = (start, end) => parseInt(start) < parseInt(end)
const isRangeValid = range => range.length == 2 && range.every(isNumeric) && isOrdered(range[0], range[1])
const isSingleValid = single => single.length == 1 && isNumeric(single[0])
function f(input) {
const inputs = input.split(',').map(x => x.trim());
for (const x of inputs) {
if (!x) return false;
const pages = x.split('-');
if (!isSingleValid(pages) && !isRangeValid(pages))
return false;
}
return true;
}
console.log(f("1, 3, 6-9"))
console.log(f("1-5, 5"))
console.log(f("6, 9"))
console.log(f(",5"))
console.log(f("5-,9"))
console.log(f("9-5,"))
console.log(f("2,6-"))
console.log(f("10-1"))
console.log(f("56-0"))
推荐阅读
- python - Spyder Ipython 与 Python 提示符中的不同可打印表示
- deployment - 如何使用 MS Orca 在 MSI 中配置 StartMenu 位置/路径?
- flutter - DropdownButton 出现红屏
- node.js - 工作区中未设置 Angular 12 通用配置“开发”
- ruby-on-rails - Rails 6 多态关联连接 - PG::UndefinedTable: ERROR: missing FROM-clause entry for table messages
- javascript - React - 不要以某种方式接受道具(Typescript)
- javascript - 当swiperjs被交互停止或被鼠标事件暂停时如何分离 - ReactJS
- r - 如何使用 SSH 连接到 R 中远程服务器上的 SQLite 数据库?
- python - 在没有管理员权限的情况下从 C# 使用 Git-bash
- google-kubernetes-engine - “generic-garbage-collector”删除了 StatefulSet 及其 pod。为什么?