我有以下十进制值数组,您能帮我编写正则表达式来验证它们吗?
[456, 789]
[456.24, 789.24]
[456.24]
正如您在上面的 3 个示例中所看到的,数组内容每次都会有所不同,其中的值有时会以小数位显示,有时显示为整数,有时数组只有一个值。此外,我的正则表达式应该验证小数点前的字符是否最少为 3 位,最多为 5 位。
我写了一个正则表达式,比如 -
^[(d{3,5}.)?d+,s(d{3,5}.)?d+]$
它适用于数组[456.24, 78]
但不适用于[456.24]
你能帮我纠正我写的正则表达式吗?
添加空格留有余地,就是这个
[s*d{3,5}(?:.d*)?(?:s*,s*d{3,5}(?:.d*)?)*s*]
读
[
s*
d{3,5}
(?: . d* )?
(?:
s* , s*
d{3,5}
(?: . d* )?
)*
s*
]
你不应该依赖常数的值,你应该放一个量词:
^[d+(?:.d+)?(?:,s*d+(?:.d+)?)*]$
现场演示
故障:
^[
匹配输入的开始,然后立即[
d+
匹配任意位数(?:.d+)?
匹配可选的小数部分(?:
非捕获组 #2 的开始,s*
在可选空格前匹配逗号d+(?:.d+)?
匹配一个数字,和以前一样
)*
重复次数或零时间]$
匹配]
和字符串结尾
改用split
可以使事情变得容易得多。
(?:[[]]|,s*)
这会在方括号或逗号上拆分,后跟一个可选的? 空格并返回一个数组,例如
[0] =>
[1] => 456.24
[2] => 789.24
[3] =>
注意:第一个和最后一个元素为空,因为我们也在方括号上拆分。
如果您不喜欢这样,您可以简单地先修剪/删除括号或使用另一个正则表达式来选择两个方括号之间的所有内容,例如[([^][]*?)]
(这里在第1
组中(