0

在应用程序中,我需要验证用户输入的字符串。

一个数字或一个范围(用“-”分隔的两个数字)或逗号分隔的数字和/或范围列表以及任何数字必须介于 1 和 999999 之间。

逗号和或“-”前后允许有空格。

我认为下面的正则表达式会做到这一点。

(\d{1,6}\040?(,|-)?\040?){1,}

这符合以下(非常好)。(\040在正则表达式中是空格字符)。

  • 00001
  • 12
  • 20,21,22
  • 100-200
  • 1,2-9,11-12
  • 20、21、22
  • 100 - 200
  • 1, 2 - 9, 11 - 12

但是,我也得到了匹配:

  • !!!12

我在这里想念什么?

4

2 回答 2

1

你需要锚定你的正则表达式

^(\d{1,6}\040?(,|-)?\040?){1,}$

否则你会在“!!!12”上得到部分匹配,它只匹配最后一个数字。

在 Regexr 上查看

于 2013-01-29T13:50:30.790 回答
0
/\d*[-]?\d*/

我已经用 perl 对此进行了测试:

> cat temp
00001 
12 
20,21,22 
100-200 
1,2-9,11-12 
20, 21, 22 
100-200
1, 2-9, 11-12
> perl -lne 'push @a,/\d*[-]?\d*/g;END{print "@a"}' temp
00001   12   20  21  22   100-200   1  2-9  11-12   20   21   22   100-200  1   2-9   11-12 

正如上面的结果所示,将所有正则表达式匹配到一个数组中,最后打印数组元素。

于 2013-01-29T13:58:55.337 回答