![](/img/trans.png)
[英]Regular expression for any number of characters unlimited but should allow only 12 numbers
[英]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;
}
上面的正则表达式不起作用。 需要帮忙
您问题的其他要求是:
使用
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])
- 1
到125
(?:-(?:[1-9]|[1-9]\\d|1[01]\\d|12[0-5]))?
- 可选的组匹配-
以及1
到125
(?:,(?:[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])
- 1
到125
(?:-(?:[1-9]|[1-9]\\d|1[01]\\d|12[0-5]))?
- 可选序列-
和1
到125
$
- 结束字符串。 如果页面的范围只能包含一个连字符,则可以匹配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.