【发布时间】:2019-03-08 11:52:12
【问题描述】:
是否有任何正则表达式可以测试这种情况。
用逗号分隔的数字字符串,其中左边的数字应该小于右边的数字。 正确示例:1,2,3 4,10,20 错误示例:3,2,1 4,1,20
字符串可以有 - 分隔符,如 1-25,其中左侧应小于右侧,字符串不应在此范围内包含数字。
正确示例:1-50,51,52,55-60 1,2,3-10,12,20 错误示例:1-50,49,20,60 2,3,1-10,11
我应该为此编写单独的函数吗?
谢谢
【问题讨论】:
-
您可以为此编写一个正则表达式,但它几乎无法维护。
-
正则表达式的想法不是验证表达式内部的逻辑,而只是验证表达式本身。这意味着“左边应该小于右边”的部分不是正则表达式的正确用例。在我看来,您应该首先验证正则表达式(声明它是逗号分隔的数字列表的部分,具有范围的可能性),然后在第二次迭代中验证字符串中的逻辑。
-
正如@jfc 所说,例如过滤每个数字并将其添加到列表或类似的东西中,然后查看下一个数字是否大于前一个数字
-
你不能用正则表达式来做到这一点。如果不使用编程语言(此处为 JS),根本不可能。
-
@revo 我有点不同意 - 你可以用正则表达式做到这一点。这是一个示例
/1-[2-9]|2-[3-9]|3-[4-9]|4-[5-9]|5-[6-9]|6-[7-9]|7-[89]|8-9/- 它验证您是否在-符号的两侧只有两个单位数字,并且左边的数字小于右边的数字。为超过两个个位数的数字创建正则表达式的复杂性爆炸式增长,因此手动完成非常困难。所以,技术上这个任务是可能的。它仍然不应该在任何严肃的应用程序中尝试。对于使用该正则表达式引起任何头痛和/或呕吐,我深表歉意。
标签: javascript regex