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

半角の一文字を1とカウントし、全角の一文字も1とカウントしたいのですが、うまい方法を教えてください。

例)
1111ああああ → 8文字
11111111 → 8文字
ああああああああ → 8文字

自分なりに調べて見たら以下の命令を見つけたのですが、うまく行かないのです。

$n =~ tr/\x00-\x7f/\x00-\x7f/;
$nn =~ tr/\xa1-\xfe/\xa1-\xfe/;

宜しくお願いします。

A 回答 (1件)

参考 URL をご覧頂ければわかると思いますが、文字を分割して配列にする方法が出ています。


EUC-JP じゃないと分割できないので、適宜 EUC-JP にコンバートします。

以下のサンプルのようにしてみるとわかりやすいと思います。
---
require 'jcode.pl';

foreach(qw(1111ああああ 11111111 ああああああああ こんにちは 教えて!goo OKWeb)){
print '"' . $_ . '" は ' . strlength($_) . ' 文字です' . "\n";
}

sub strlength
{
my $str = shift;
jcode::convert(\$str, 'euc');
my @buf =
$str =~ /([\x00-\x7f]|[\x8e\xa1-\xfe][\xa1-\xfe]|\x8f[\xa1-\xfe][\xa1-\xfe])/og;
scalar @buf;
}
---
HTML だとインデントが見にくいかも知れませんが、こんな感じで、大体正確にカウントできると思います。

必ず require 'jcode.pl' (あるいは use Jcode) して、上記 strlength 関数を書けば、

---
★ = strlength(☆);
★ ... 文字数
☆ ... 対象文字列
---

という関数で、お望みの処理が簡単に扱えるようになります。

なお、jcode.pl を使わずに use Jcode した場合は、
jcode::convert(\$str, 'euc');
の行の先頭を大文字に、
Jcode::convert(\$str, 'euc');
として行ってください。

参考URL:http://www.din.or.jp/~ohzaki/perl.htm#JP_Split
    • good
    • 0
この回答へのお礼

ありがとうございました。
gooからのメールに気がつかなくて返事が遅れてしまい、すいませんでした。

お礼日時:2002/10/03 23:36

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