1. ホーム
  2. ruby

[解決済み] Rubyで安全な整数パース

2022-04-24 17:19:29

質問

ある文字列、例えば '123' これを整数に変換したい。 123 .

を単純にできることは知っています。 some_string.to_i に変換されますが、これは 'lolipops'0 というのは、私が考えている効果ではありません。無効なものを変換しようとしたときに、私の顔面を吹き飛ばすような、素敵で痛々しい Exception . そうでないと、有効な 0 と、まったく数字でないものがあります。

EDITです。 正規表現のトリックを使わない、標準的な方法を探していました。

どのように解決するのですか?

Rubyには、この機能が組み込まれています。

Integer('1001')                                    # => 1001  
Integer('1001 nights')  
# ArgumentError: invalid value for Integer: "1001 nights"  

の回答にもあるように ジョセフ・ペコラロ で始まるような10進数でない有効な文字列に注意する必要があります。 0x は16進数であり 0b は2進数で、0から始まるもっと厄介な数字は8進数として解析される可能性があります。

Ruby 1.9.2ではradixの第2引数にオプションが追加され、上記の問題を回避できるようになりました。

Integer('23')                                     # => 23
Integer('0x23')                                   # => 35
Integer('023')                                    # => 19
Integer('0x23', 10)
# => #<ArgumentError: invalid value for Integer: "0x23">
Integer('023', 10)                                # => 23