首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >验证打印正则表达式的页面范围

验证打印正则表达式的页面范围
EN

Stack Overflow用户
提问于 2019-11-08 10:14:08
回答 1查看 680关注 0票数 2

我需要验证页面范围的正则表达式。(例如。列印自订页)

目前,我已经尝试过这个表达式。

代码语言:javascript
运行
复制
/^(?!([ \d]*-){2})\d+(?: *[-,] *\d+)*$/

它应该接受如下的值

代码语言:javascript
运行
复制
 1, 3, 6-9
 1-5, 5
 6, 9

它不应该接受这样的值

代码语言:javascript
运行
复制
 ,5
 5-,9
 9-5,
 2,6-
 10-1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-08 10:32:53

在这一点上,我不会费心于一个新手难以阅读的正则表达式。使用纯js的无正则表达式但冗长的解决方案:

  • 我们用逗号分开
  • 我们修整所有尾随的白色空间
  • 我们检查每个部分是否有效。
  • 当发现假范围时,我们返回false

演示:

代码语言:javascript
运行
复制
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"))

在网上试试!

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58764552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档