アプリ版:「スタンプのみでお礼する」機能のリリースについて

フォームのテキストで全角なら10文字まで、半角なら20文字まで入力できるようにしたいのですが、EUCの場合、半角カナは2バイトになるため、バイト数で制限をかけるとうまくいきません。かといって文字数で制限をかけてもうまくいきません。
何かいい方法はあるでしょうか?

A 回答 (3件)

即興で書いたのでチェックはいい加減ですがこんな感じでいかがでしょう。


<?php
function chkhankana($chr){
if(isset($chr)&&mb_strlen($chr)==1){
if(mb_convert_kana($chr,'KV')==$chr){
return false;
}else{
return true;
}
}
}
function strcnt($str){
$len= 0;
for($i=0;$i<mb_strlen($str);$i++){
$chr= mb_substr($str,$i,1);
if(chkhankana($chr)){
$len+=1;
}else{
$len+=strlen($chr);
}
}
return $len;
}
?>
<html>
<head>
<meta http-equiv=content-type content="text/html; charset=EUC-JP">
<title>文字列長</title>
</head>
<body>
<form action='<?=$_SERVER['SCRIPT_NAME']?>' method='POST'>
<h4>文字列長(半角英数カナは1byteでカウント)</h4>
<table>
<tr align="center"><th width=80>文字列</th>
<td><input type="text" name="str" size="40" maxlength="20">
<input type="submit" value="Submit"></td></tr>
</table>
</form>
<?php
$str= $_POST['str'];
$len= strcnt($str);

print "入力文字列=[ ".$str." ]<br>\n";
print "文字列長=[ ".$len." ]<br>\n";
if($len>20) print "20 byte Over!!\n";
?>
</body>
</html>
    • good
    • 0

int mb_strwidth(文字列[,エンコーディング])関数を使えば


半角は文字幅1、全角は文字幅を2としてカウントしてくれますが
これじゃだめですか??
    • good
    • 1

以前に同様の質問があったようですね。


ご参考までに

http://oshiete1.goo.ne.jp/kotaeru.php3?q=1422920

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=1422920

この回答への補足

ご回答ありがとうございます。
今回考えているのは、
半角カナだけなら、最大20文字まで入力可能で、
全角文字だけなら最大10文字まで入力可能な
形にしたいのです。
1文字ずつ文字を識別していって判断するしかないようですね。
半角カナの場合は1バイトとみなすようなことができればいいんですが。。。

補足日時:2006/05/09 16:49
    • good
    • 0

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