数字范围的正则表达式

寻找一个包含数字范围的正则表达式。更具体地说,考虑数字格式:数字范围的正则表达式

NN-NN 

其中N是一个数字。因此示例如下:

04-11 

07-12

06-06

我希望能够指定范围。例如,任何事情之间:

01-2702-03

当我说的范围,这是因为如果-是不存在的。所以范围: 范围01-2702-03

将涵盖: 01-28, 01-29, 01-30, 01-3102-01

我想正则表达式,这样我可以在插入值的范围变得非常容易。有任何想法吗?

回答:

这对我来说并不完全清楚,而且你没有提到的语言为好,但在PHP它看起来像这样:

if (preg_match('~\d{2}-\d{2}~', $input, $matches) { 

// do something here

}

你有任何使用情况下,所以我们可以调整代码以您的需求?

回答:

验证日期不是正则表达式的优点。

例如,如何验证2月份的闰年。

的解决方案是使用现有的日期API在你的语言

回答:

'0[12]-[0-3][1-9]'会匹配所有需要的日期,但是,它也将匹配日期像01-03。如果您想要精确匹配并且只匹配该范围内的日期,那么您需要做一些更高级的操作。

下面是一个Python易于配置的例子:

from calendar import monthrange 

import re

startdate = (1,27)

enddate = (2,3)

d = startdate

dateList = []

while d != enddate:

(month, day) = d

dateList += ['%02i-%02i' % (month, day)]

daysInMonth = monthrange(2011,month)[1] # took a random non-leap year

# but you might want to take the current year

day += 1

if day > daysInMonth:

day = 1

month+=1

if month > 12:

month = 1

d = (month,day)

dateRegex = '|'.join(dateList)

testDates = ['01-28', '01-29', '01-30', '01-31', '02-01',

'04-11', '07-12', '06-06']

isMatch = [re.match(dateRegex,x)!=None for x in testDates]

for i, testDate in enumerate(testDates):

print testDate, isMatch[i]

dateRegex看起来是这样的:

'01-27|01-28|01-29|01-30|01-31|02-01|02-02' 

,输出是:

01-28 True 

01-29 True

01-30 True

01-31 True

02-01 True

04-11 False

07-12 False

06-06 False

以上是 数字范围的正则表达式 的全部内容, 来源链接: utcz.com/qa/263396.html

回到顶部