ホーム DoRuby blank?は意外なサプライズ

blank?は意外なサプライズ

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

文字列のblank?メソッドは正規表現を使っていますので、UTF-8的に正しいバイト列ですかチェックしています。

型によって、blank?の処理が違います。

文字列の場合、正規表現で判断しています。

配列の場合、Arrayのempty?と同じです。

ハッシュの場合、Hashのempty?と同じです。

blank.rbの一部ソースコード:

class String

def blank?

self !~ /[^[:space:]]/

end

end

class Array

alias_method :blank?, :empty?

end

class Hash

alias_method :blank?, :empty?

end

Ruby 1.9 でUTF-8的に正しくないバイト列がある文字列を扱っていると、

正規表現マッチや gsub といったメソッドを使っているところで ArgumentError: invalid byte sequence in UTF-8 例外が発生します。

文字列を生成したときではなくて正規表現マッチなんかをしたときに始めてエラーが出るのです。

例:

str = “\xC1\xB9\xA4\xB1\xA4\xF3\xA4\xC1\xA4\xF3\xBD\xC1”

begin

str.blank?

rescue => e

p e # ArgumentError: invalid byte sequence in UTF-8

end

文字列のblank?メソッドは正規表現を使っていますので、UTF-8的に正しいバイト列ですかチェックしています。

配列の要素に対して、正しいUTF8バイト列をチェックするため、要素に対して、blank?を使用します。

記事を共有

最近人気な記事