我正在努力使这个工作,它几乎在那里但不完全!
我需要能够允许范围从1
到9223372036854775807
。
我有以下正则表达式:
^([1-9][0-9]{0,18}|9223372036854775807)$
这允许我输入我想要的范围内的值,但它也允许我转到9999999999999999999
是否可以轻松阻止它转到9223372036854775807
?
答案 0 :(得分:6)
为了示范,请到这里:
^(?:[1-9][0-9]{0,17}|[1-8][0-9]{18}|9(?:[01][0-9]{17}|2(?:[01][0-9]{16}|2(?:[0-2][0-9]{15}|3(?:[0-2][0-9]{14}|3(?:[0-6][0-9]{13}|7(?:[01][0-9]{12}|20(?:[0-2][0-9]{10}|3(?:[0-5][0-9]{9}|6(?:[0-7][0-9]{8}|8(?:[0-4][0-9]{7}|5(?:[0-3][0-9]{6}|4(?:[0-6][0-9]{5}|7(?:[0-6][0-9]{4}|7(?:[0-4][0-9]{3}|5(?:[0-7][0-9]{2}|80[0-7]))))))))))))))))$
相反,使用您正在使用的语言的标准库将其解析为整数,并使用值检查(>
运算符等)。
答案 1 :(得分:0)
bc非常快:
while read -p "Enter value: " a; do [[ $(echo "9223372036854775807 - $a" | bc) -gt 0 ]] && echo good || echo bad; done