Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

全て全角文字かチェックしたい

PHP Version 5.1.6を使っています。 UTF-8だと全角文字が3バイトとして扱われるので、 半角文字のチェックのままだと3倍の文字制限が必要になってしまいます。 例: [名前] 最大全角10文字まで 半角を入力した場合:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 全角を入力した場合:あああああアア亜亜亜 半角文字だと3倍の30文字まで入力できてしまうので、 なんとかして全角文字だけ入力したかチェックする正規表現が知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • wp_
  • ベストアンサー率54% (132/242)
回答No.2

全角文字だけ入力されるという前提ならば http://phpspot.org/blog/archives/2005/11/php_17.html http://ifs.seesaa.net/article/26300967.html この辺が参考になりますかね。 鬼車が入っているかによってやり方も変わってくるかと思います。

takagoo100
質問者

お礼

ご返答ありがとうございます。 うーん、このチェックは難しそうですね・・・ #1の回答で全角も半角も同じ文字数にカウントするやり方が無難そうですね。 悩んでたのは、そのやり方にしても表示したときに 全角を全て入力した場合と半角を全て入力した場合とでは 見た目の長さが違ってくるのが気になっていました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • uki629
  • ベストアンサー率23% (40/172)
回答No.3

>半角文字だと3倍の30文字まで入力できてしまうので、 これってmb_strlenで文字数でチェックしているということですか? だったら mb_strlen($text,"UTF-8") $textは文字列 これでUTF-8でも半角/全角混在していても正確に文字数を調べられます。

takagoo100
質問者

お礼

ご返答ありがとうございます。 >これってmb_strlenで文字数でチェックしているということですか? いえ、strlenで調べてました。 これだと半角基準なので全角10文字まで入力できるようにすると strlenで返す値は30必要になってしまいます。 なのでmb_strlenを使った方が良さそうです。

すると、全ての回答が全文表示されます。
  • wp_
  • ベストアンサー率54% (132/242)
回答No.1

$str = "あa亜"; echo mb_strlen($str,'UTF-8'); // <-3 mb系が使えない場合はpack関数を用いて文字列をバイナリに分解し検査しましょう。

takagoo100
質問者

お礼

ご返答ありがとうございます。 なるほど、これで半角も全角もすべて同じ文字数になりますね。

すると、全ての回答が全文表示されます。

関連するQ&A