0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

電話番号チェックに NumberUtils#isNumber() を使ってはいけない

Posted at

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になった理由は知りませんが、やはり間違えやすいからではないですかね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?