这是我的尝试,是否有更好的方法?
^([2-9]|[1-9][0-9]|100)$
答案 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 <=100
或between?