我的文本框应该只允许有效的页码,例如
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;
}
上述正则表达式不起作用。需要帮助
发布于 2019-08-08 07:02:02
你所提问题的额外要求是:
使用
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
to 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
的数字
$
-字符串的末端。发布于 2019-08-08 07:10:57
如果页面的范围只能包含单个连字符,则可以匹配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,后面跟着两个可选数字:
^[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)))
https://stackoverflow.com/questions/57406811
复制相似问题