【发布时间】:2020-09-26 15:17:36
【问题描述】:
我想创建两个正则表达式来检查这两种类型的字符串:
322°, 79%, 52%
hsl(322°, 79%, 52%)
所以:
- 0 到 259 之间的数字、度数符号、逗号、可选空格
- 0 到 100 之间的数字、百分比符号、逗号、可选空格
- 0 到 100 之间的数字,百分比符号
和 hsl(...) 差不多,但在 hsl(...)
例子:
// valid
322°, 79%, 52%
0°, 0%, 0% // min values
259°, 100%, 100% // max values
0°, 0%,0% // no spaces
0°,0%, 0% // no spaces
0°,0%,0% // no spaces
hsl(322°, 79%, 52%)
hsl(0°, 0%, 0%)
hsl(259°, 100%, 100%)
hsl(259°,100%, 100%)
hsl(259°, 100%,100%)
hsl(259°,100%,100%)
// Not valid
322, 79%, 52%
322°, 79, 52%
322°, 79%, 52
322°, 79%, 52%
hsl(259°,100%,100%)
这是我尝试过的(这是第二种格式的正则表达式,第一种类似但没有hsl(...)):
const regexSimpleFormat = /(hsl\() (([0 - 9] | [1 - 9][0 - 9] | [1 - 2][0 - 5][0 - 9]) °) (, [] ?)(([0 - 9] | [1 - 9][0 - 9] | 100) %)(, [] ?)(([0 - 9] | [1 - 9][0 - 9] | 100) %)(\))/gi
console.log(regexSimpleFormat.test('hsl(22°, 79%, 52%)')) // should be true
console.log(regexSimpleFormat.test('hsl(02°, 79%, 52%)')) // should be false
如您所见,它不起作用,因为我得到的是假而不是真。为什么?有没有更好的方法来做我需要的事情?
【问题讨论】:
-
您的最后一个无效示例
hsl(259°,100%,100%)与您为字符串hsl(322°, 79%, 52%)提供的第二个示例相矛盾。 -
通常情况下,我会抓住数字,转换为数字,然后检查它们是否在范围内。此外,您的正则表达式中有很多空格 - 它们很重要!
-
最后两个“无效”示例也都显示为“有效”示例。我怀疑您打算“剪切-粘贴-编辑”,但在前两个步骤后分心,忘记完成最后一步。
标签: javascript regex