プロが教える店舗&オフィスのセキュリティ対策術

PHP Version 5.1.6を使っています。
UTF-8だと全角文字が3バイトとして扱われるので、
半角文字のチェックのままだと3倍の文字制限が必要になってしまいます。

例:
[名前] 最大全角10文字まで
半角を入力した場合:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
全角を入力した場合:あああああアア亜亜亜

半角文字だと3倍の30文字まで入力できてしまうので、
なんとかして全角文字だけ入力したかチェックする正規表現が知りたいです。

A 回答 (3件)

全角文字だけ入力されるという前提ならば


http://phpspot.org/blog/archives/2005/11/php_17. …
http://ifs.seesaa.net/article/26300967.html
この辺が参考になりますかね。
鬼車が入っているかによってやり方も変わってくるかと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/10/31 17:47

>半角文字だと3倍の30文字まで入力できてしまうので、


これってmb_strlenで文字数でチェックしているということですか?
だったら
mb_strlen($text,"UTF-8")
$textは文字列
これでUTF-8でも半角/全角混在していても正確に文字数を調べられます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/10/31 17:52

$str = "あa亜";


echo mb_strlen($str,'UTF-8'); // <-3

mb系が使えない場合はpack関数を用いて文字列をバイナリに分解し検査しましょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/10/31 04:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!