正则表达式是否有比这更好的方法来匹配2-100之间的数字字符串?

时间:2018-08-10 22:01:55

标签: ruby regex

这是我的尝试,是否有更好的方法?

^([2-9]|[1-9][0-9]|100)$

4 个答案:

答案 0 :(得分:1)

更好的方法可能是不使用正则表达式。

sumlev=='050'

答案 1 :(得分:0)

这取决于您的上下文以及您是否关注性能。

我会转换为int:

str =~ /^(\d+)$/ && $1.to_i.between?(2, 100)

我认为它比正则表达式更容易阅读。基本上说:“ str只是一个数字,这个数字在2到100之间”。

此测试与您的测试完全兼容(等效)

答案 2 :(得分:0)

您的正则表达式不适用于Ruby。在Ruby中,^匹配 line 的开头,而不是 string 的开头;类似地,对于$位于 line 末尾而不是 string

在Ruby中,^$几乎总是一个错误,您通常希望分别使用\A\z

\A([2-9]|[1-9][0-9]|100)\z

如果您想要或需要使用正则表达式,请从与所需内容匹配的正则表达式开始。

答案 3 :(得分:0)

要视情况而定。

如果该正则表达式只是更大的正则表达式的一部分,或者该正则表达式是用于传递给仅接受正则表达式的函数的参数,那么我认为这不会比这更好。

但是,如果仅使用它来验证一些数字,那么更好的方法是将文本转换为整数a,然后使用>= 2 and <=100between?

进行验证。