こんにちは、高石です。

正規表現の文字クラス指定で、A-Zとその前後を含む範囲をまとめ
て指定しているときにiオプションを使うと、大文字のアルファベッ
トにもマッチしなくなってしまいます。

"A" =~ /[!-_]/
=>0

これは当然マッチしますが、

"A" =~ /[!-_]/i
=>nil

とiオプションをつけただけでマッチしなくなります。
また、おそらく根は同じところにあるような気がしますが、

/[A-_]/i

が、invalid regular expression になります。

/[A-Z\[-_]/i

と分けて書けば大丈夫でした。

Ruby 1.6.8 (2002-12-24) [i686-cygwin]
Ruby 1.8.0 (2003-07-31) [i386-cygwin]

で確認しました。
/--------------------------------------------------------/
  高石 勇人 < rio-t / presen.to >
  PGP Key(RSA): http://rio-t.presen.to/pgp/mykey.asc
         (DSS): http://rio-t.presen.to/pgp/mykey-dss.asc
/--------------------------------------------------------/