我想创建一个接受如下字符串的正则表达式:
DXXX HH: mm
,其中XXX
是1到999之间的数字,但它也可以接受0前缀的数字,如01和001,但它不能接受例如0001,其中总长度>3
HH:mm
为小时和分钟,采用24h格式。
接受值示例:D001 14:01
、D999 00:00
我写了第二部分,即:/^(2[0-3]|[0-1][d]):[0-5][d]$/
对于第一部分:^d{1,3}$
,但这接受0
,00
和000
。
如何解决这个问题?
让我们保持简单:
re = String.raw`
^
D
( # numeric group
[1-9] [0-9]? [0-9]? # 1 or 12 or 123
| # or
0 [1-9] [0-9]? # 01 or 012
| # or
00 [1-9] # 001
)
x20 # space
( # hours
2 [0-3] # 20..23
| # or
[0-1] [0-9] # 00...19
)
:
( # seconds
[0-5] [0-9] # from 00 to 59
)
$
`
re = new RegExp(re.replace(/#.*|s+/g, ''))
console.log(re)
console.log(re.test('D001 23:11'))
console.log(re.test('D011 23:11'))
console.log(re.test('D111 23:11'))
console.log(re.test('D0 23:11'))
console.log(re.test('D00 23:11'))
console.log(re.test('D000 23:11'))
const regex = /^D(?:0d?[1-9]|[1-9]{1,3}) [0-2]d:[0-5]d$/
console.log(regex.test("D001 14:01"))
console.log(regex.test("D999 00:00"))
console.log(regex.test("D000 00:00"))
console.log(regex.test("D00 00:00"))
console.log(regex.test("D0 00:00"))
console.log(regex.test("D001 00:00"))
console.log(regex.test("D01 00:00"))
console.log(regex.test("D011 00:00"))