我正在使用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+)*$
这适用于所有模式,除了:
仅当关系运算符(<
,<=
,>
,>=
)都存在作为字符串的第一个元素.例如<=3, 4-5, 6, 7..8
工作完美,但是<=3, 4-5, 6, 7..8, >=5
关系运算符不在字符串的第一个元素.
字符串<3<4, 5, 9-4
也没有给出任何错误,即它是令人满意的条件,虽然在<3
和之间需要逗号<4
.
该串中的数字应小于或等于100,即<100
,0-100
,99..100
它不应该允许前导零(如003
,099
)
废弃并使用标记器代替.用逗号分隔字符串,然后查看每个标记并决定(可能使用正则表达式)它是什么类型的关系.如果它不是现有的关系,则它是无效的.如果任何关系包含的数字太大,则无效.
为了您的理智以及在完成此代码后必须维护此代码的人员,请不要使用正则表达式来验证这种复杂的相互关联的规则集.将其分解为更简单的块.
归档时间: |
|
查看次数: |
1269 次 |
最近记录: |