修改数字列表和数值范围表达式的正则表达式

use*_*607 1 regex extjs

我正在使用ExtJS.使用ExtJS组件制作的文本字段之一应该允许使用逗号分隔的数字/操作符字符串(3个类似示例)

1, 2-3, 4..5, <6, <=7, >8, >=9 
>2, 3..5, >=9,>10
<=9, 1, <=8, 4..5, 8-9
Run Code Online (Sandbox Code Playgroud)

这里我使用等于,范围( - ),序列(..)和大于/等于运算符的数字小于或等于100.这些数字用逗号分隔.

什么可以是这种类型的字符串的正则表达式?

对于我之前提出的问题..我得到了"dlamblin"的解决方案: ^(?:\d+(?:(?:\.\.|-)\d+)?|[<>]=?\d+)(?:,\s*\d+(?:(?:\.\.|-)\d+)?|[<>]=?\d+)*$

这适用于所有模式,除了:

  1. 仅当关系运算符(<,<=,>,>=)都存在作为字符串的第一个元素.例如<=3, 4-5, 6, 7..8工作完美,但是<=3, 4-5, 6, 7..8, >=5关系运算符不在字符串的第一个元素.

  2. 字符串<3<4, 5, 9-4也没有给出任何错误,即它是令人满意的条件,虽然在<3和之间需要逗号<4.

  3. 该串中的数字应小于或等于100,即<100,0-100,99..100

  4. 它不应该允许前导零(如003,099)

Wel*_*bog 9

废弃并使用标记器代替.用逗号分隔字符串,然后查看每个标记并决定(可能使用正则表达式)它是什么类型的关系.如果它不是现有的关系,则它是无效的.如果任何关系包含的数字太大,则无效.

为了您的理智以及在完成此代码后必须维护此代码的人员,请不要使用正则表达式来验证这种复杂的相互关联的规则集.将其分解为更简单的块.