繁体   English   中英

需要正则表达式,只允许有效的页码,如1,2,3,4-5,每个页码的最大长度为3位(1-999)

[英]Need Regular expression that should allow only valid Page Numbers like 1,2,3,4-5 with max 3 digits length of each page number (1-999)

我的文本框应该只允许有效的页码

1,2,3,4-9 
2,8
1-3,5
5-7
7,8-6
1-3,5
1,2
2,3,4,5-6,7
10
11-15
22,25

码:

// Regex
var pageNumberHypenComma = new RegExp("^[0-9]+(?:,[0-9-]+)*(?:-[0-9,]+)*$");  

// Value of Page Numbers
var txtMemberPages = "1,2,3,4-9,12";

// Regex checking
if (!pageNumberHypenComma.test(txtMemberPages)) {
    alert('Invalid Page Number(s)'); 
    return false;
}

上面的正则表达式不起作用。 需要帮忙

您问题的其他要求是:

  • 值不能为零
  • 值应介于1和125之间
  • 范围应仅出现在两个数字之间。

使用

var rng = '(?:[1-9]|[1-9]\\d|1[01]\\d|12[0-5])'; // This is a number from 1 to 125
var pageNumberHypenComma = new RegExp("^" + rng + "(?:-" + rng + ")?(?:," + rng + "(?:-" + rng + ")?)*$");

请参阅正则表达式演示

细节

  • ^ - 字符串的开头
  • (?:[1-9]|[1-9]\\d|1[01]\\d|12[0-5]) - 1125
  • (?:-(?:[1-9]|[1-9]\\d|1[01]\\d|12[0-5]))? - 可选的组匹配-以及1125
  • (?:,(?:[1-9]|[1-9]\\d|1[01]\\d|12[0-5])(?:-(?:[1-9]|[1-9]\\d|1[01]\\d|12[0-5]))?)* - 0或更多的序列
    • , - 逗号
    • (?:[1-9]|[1-9]\\d|1[01]\\d|12[0-5]) - 1125
    • (?:-(?:[1-9]|[1-9]\\d|1[01]\\d|12[0-5]))? - 可选序列-1125
  • $ - 结束字符串。

如果页面的范围只能包含一个连字符,则可以匹配1+个数字后跟可选部分以匹配连字符和1 - 3个数字。

然后用逗号重复该模式0次以上。

^\d{1,3}(?:-\d{1,3})?(?:,\d{1,3}(?:-\d{1,3})?)*$

说明

  • ^字符串的开头
  • \\d{1,3}(?:-\\d{1,3})? 匹配1-3位数字并可选地匹配-和1-3位数字
  • (?:非捕获组
    • ,\\d{1,3}(?:-\\d{1,3})? 匹配逗号,1-3位数字和可选匹配-和1-3位数字
  • )*关闭非捕获组并重复0次以上

正则表达式演示

 var pageNumberHypenComma = new RegExp("^\\\\d{1,3}(?:-\\\\d{1,3})?(?:,\\\\d{1,3}(?:-\\\\d{1,3})?)*$"); [ "1,2,3,4-9-4", "1,2,3,4-9", "2,8", "1-3,5", "5-7", "7,8-6", "1-3,5", "1,2", "2,3,4,5-6,7", "10", "11-15", "22,25", "1,2,3,4-9,12" ].forEach(s => console.log(s + " ==> " + pageNumberHypenComma.test(s))) 

要仅匹配大于0的页面编号,您可以匹配数字1-9,后跟2个可选数字:

^[1-9]\d{0,2}(?:-[1-9]\d{0,2})?(?:,[1-9]\d{0,2}(?:-[1-9]\d{0,2})?)*$

正则表达式演示

 var pageNumberHypenComma = new RegExp("^[1-9]\\\\d{0,2}(?:-[1-9]\\\\d{0,2})?(?:,[1-9]\\\\d{0,2}(?:-[1-9]\\\\d{0,2})?)*$"); [ "1,2,3,4-9-4", "0", "0-1, 3", "1,2,3,4-9", "2,8", "1-3,5", "5-7", "7,8-6", "1-3,5", "1,2", "2,3,4,5-6,7", "10", "11-15", "22,25", "1,2,3,4-9,12", "0", "0-1,3" ].forEach(s => console.log(s + " ==> " + pageNumberHypenComma.test(s))) 

使用1 - 125而不是999的范围,模式看起来像:

^(?:[1-9]|[1-9]\d|1[01]\d|12[0-5])(?:-(?:[1-9]|[1-9]\d|1[01]\d|12[0-5]))?(?:,(?:[1-9]|[1-9]\d|1[01]\d|12[0-5])(?:-(?:[1-9]|[1-9]\d|1[01]\d|12[0-5]))?)*$

正则表达式演示

 var pageNumberHypenComma = new RegExp("^(?:[1-9]|[1-9]\\\\d|1[01]\\\\d|12[0-5])(?:-(?:[1-9]|[1-9]\\\\d|1[01]\\\\d|12[0-5]))?(?:,(?:[1-9]|[1-9]\\\\d|1[01]\\\\d|12[0-5])(?:-(?:[1-9]|[1-9]\\\\d|1[01]\\\\d|12[0-5]))?)*$"); [ "1,2,3,4-9", "2,8", "1-3,5", "5-7", "7,8-6", "1-3,5", "1,2", "2,3,4,5-6,7", "10", "11-15", "22,25", "0", "0-1,3", "1,2,3,4-9", "1,2,3,4-9-4", "1", "126", "125", "10", "1000", "1,4,124-125,4", "1,4,125-126" ].forEach(s => console.log(s + " ==> " + pageNumberHypenComma.test(s))) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM