0

我有一个过滤器,它有一个字段,可让您输入以逗号分隔的 id 列表或 id 范围。例如,“1,2,3”和“4-9”是有效的 ID。我为此编写了以下正则表达式:

/(^\d+(?:[,]\d+)*$)|(^\d+-\d+$)/.test(str)

其中 str 是我正在评估的字符串。这可以正常工作并为所有场景返回正确的布尔值,除非在一个范围内,第一个 id 大于第二个。例如,12-10 是一个无效的范围,但上面的正则表达式不会返回 false。

有没有办法验证使用正则表达式?我显然可以在'-'上拆分字符串并比较这两个部分,但会失去正则表达式提供的简洁性。

4

2 回答 2

3

“正则表达式提供的简洁性”可能不值得它引入的复杂性。这似乎是一个定义明确的问题,对每个元素先拆分,再拆分-似乎是一种非常简单有效的方法。

于 2012-08-17T14:59:33.880 回答
2

解决这个问题不是正则表达式的工作。

使用正则表达式提取范围,然后进行验证。

于 2012-08-17T14:58:54.317 回答