Non-hexadecimal strings beginning with a leading zero are treated as octal values. Thus the string 09 will return false, since 9 is not a valid octal value. However, numbers beginning with 0. are treated as decimal.
https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/math/NumberUtils.html
頭にゼロが付いていて16進数でない文字列は8進数として扱われます。
よって9は有効な8進数ではないため、文字列 "09" はfalseを返します。
ただし、(頭ゼロの次が)0で始まる文字列の場合は10進数として扱います。
つまり、電話番号の数値チェックで NumberUtils#isNumber()
を使うと "090" や "080" が数値ではないと判定されてしまいます。
この場合、 NumberUtils#isDigits()
を使うのが正解です。
結合テスト以降の工程で意味不明なバグとして顕在化するので、マジで勘弁してください。
なお、 NumberUtils#isNumber()
はDeprecatedなので注意。
Deprecatedになった理由は知りませんが、やはり間違えやすいからではないですかね。