• ベストアンサー

カタカナの全角と半角が区別されません、、、。

カタカナで入力の際に全角と半角を区別したいのですがどうしたらよいでしょうか? 下記のような数字は全角と半角を区別できるようです。 abc abc 123 123 http://boueki.xsrv.jp/etc/mojisuucount/mojisuuj20dame.html

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

  • ベストアンサー
  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.7

十分というわけではないですが。 function strLength(str){ var matches = str.match(/[\u0020-\u007E\uFF61-\uFF9F]/) || []; return str.length - matches.length / 2; } ================================================= escape について http://www.openspc2.org/JavaScript/escape/index.html

kon3914
質問者

お礼

ありがとうございます!ありがとうございます! ありがとうございます!!!!!! 動きました!!!感動しました、、、、。

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

その他の回答 (6)

  • TYWalker
  • ベストアンサー率42% (281/661)
回答No.6

「勘違いしていたよう」と書かれていたからもう解決されたんですね? ぼくは最初 「このプログラムで半角カナも全角カナも同じ1文字として  カウントされるのはなぜか」 というあなたの質問に回答#2でそのまま答えたんですよ。 で、その回答#2への再質問をあなたがされて、 >「%u が現れたら文字数に1を加えてiに3を加えている処理のところ」 >とはどこでしょうか? と聞かれたので、その質問の部分を (あなたがお書きになったプログラムから抜き出して) 回答#4に書いたんですよ。 // から後に質問を書いたのは、 JavaScript は // から後ろが注釈(説明)になるからですよ。 もともとあったプログラムの一部を抜き出して書いたので、 そこをアップして動かしても動かないと思いますよー。 Web で動くプログラムは、 ちょこちょこっと書くと動けるから作ったり、 どっかから拾ってくる人多いんですけど、 どこの誰が使うかわからないので、 よほどの「プロ」でも難しいですよ。 あなたの情報が盗まれたり、 あなたのコンピューターがおかしくされたり、 他人のコンピューターがおかしくなったり、 他人の情報が別の人に行ったりしますよ。 そういう事件がいろいろあるのご存知ですよね。 「こういうものはどこかにないですか」 ということですが、ホントに失礼ですが今のあなたの状態で、 どこかでそれらしいプログラムをもらってきて 世間に公開するのはちょっとあぶないと思いますよ~~。 あなたも「1年ぐらい」とおっしゃってますが、 自分がなにをどうやっているのか分かって、 他の誰からもつけいられない自信がしっかり出来るまでは、 自分でじっくり腰をすえて勉強された方がいいと思いますよ。 JavaScriptは、危険をおかしてインターネットに公開しなくても、 手元で動かせますよ。 あなたの最初のプログラムを、 HTMLごと保存してローカルにおいてダブルクリックして開いたら 動きましたよ。 (当然半角カナも1文字でカウントされるという問題は  そのままですが) やさしい本としてはこんなのがありますよ。 http://www.amazon.co.jp/First-JavaScript-%E9%A0%AD%E3%81%A8%E3%81%8B%E3%82%89%E3%81%A0%E3%81%A7%E8%A6%9A%E3%81%88%E3%82%8BJavaScript%E3%81%AE%E5%9F%BA%E6%9C%AC-Michael-Morrison/dp/4873113733

kon3914
質問者

お礼

詳しくまたありがとうございます! 解決はしていないのですが半角カナ認識がこんなに難しいことかと知らず皆様にご迷惑をおかけしてすみません。 自分としては単にモバオークションに出品する際のタイトルを何度も何度も計算しなおして書き直すのが凄い時間がかかったので、個人利用でこういった物があればいいなと思ったんです。 アップロードしなくてもプログラムが動くとは知りませんでした。 また他人の情報が別の人に行ったりと危ないとは知りませんでした。 ここをこう直せば解決ですよ、みたいな簡単なことかと気軽に質問してしまいすみませんでした。

全文を見る
すると、全ての回答が全文表示されます。
  • Werner
  • ベストアンサー率53% (395/735)
回答No.5

わざわざescapeした文字列を解析するのって面倒なだけでメリット無くないですか? charCodeAtで文字コード(Unicodeコードポイント)を取得して 場合分けで数え上げるのが素直な方法だと思うのですが。 例えばこんな感じ。 http://www.kanaya440.com/contents/tips/javascript/006.html あと > var strCount = Math.ceil(strLength(str).toString() / 2); ここのtoStringはあっても誤動作はしませんが無駄です。 せっかく文字列にしてるのにすぐ数値演算してるから、 数値→文字列→数値という不必要な変換がされます。

kon3914
質問者

お礼

ありがとうございます! そうなんですかぁ。 皆様プロなのですね。 いろいろ質問して回答いただき更に難しい語句が出てきて更に混乱している自分がいます。 自分で作るのは無理かなぁと、もちろん超勉強して1年後とかに出来るかもしれませんが、、、。生半可な知識でご迷惑をおかけしてすみません。 どこかこのような物を公開しているところなんてないんですかね?

全文を見る
すると、全ての回答が全文表示されます。
  • TYWalker
  • ベストアンサー率42% (281/661)
回答No.4

もう解決しているようですが、ご自分で書いたプログラムじゃなかったんですね。 失礼しました。 このプログラムの文字数計算はむちゃくちゃ(不必要に)難しくしているので、削除でいいならそれでいいでしょう。 以下の // 以下に説明を書いて見ました。 せっかく書いたので載せます。 ★ function strLength(strSrc){ len = 0; // 長さを格納する変数、ゼロクリア strSrc = escape(strSrc); // strSrc をエスケープする // strSrc が「abc」だったら「abc」のママ // strSrc が「あいう」だったら「%u3042%u3044%u3046」 // strSrc が「アイウ」だったら「%uFF71%uFF72%uFF73」 // strSrc が「aあア bいイ cうウ」だったら「a%u3042%uFF71 b%u3044%uFF72 c%u3046%uFF73」 for(i = 0; i < strSrc.length; i++, len++){ // i が 0 から srcSrc の長さまで、i と len を1ずつ増やしながら if(strSrc.charAt(i) == "%"){ // srcSrc の i 文字番目が「%」で if(strSrc.charAt(++i) == "u"){ // その次の文字が u だったら半角英数字以外なので i += 3; // 3文字飛ばす(さっき1文字飛ばしているので、結果的に %uxxxx を飛ばして次の字を見に行く) len++; // 長さに1加算する(ここに漢字も全角かなも半角カナも来るので、半角カナも1文字でカウントされる) } i++; // i を 1 加算する(半角全角共通。結果的に半角英数字の場合は i と len が1、それ以外の場合は 2 加算) } } return len; } function showLength( str,name ) { var strCount = Math.ceil(strLength(str).toString() / 2); // さっき strLength で得られた数字を2で割ると、半角は0.5、全角は1になる // unicode 文字コード表 // あ ... 3042 い... 3044 う ... 3046 // ア ... FF71 イ ... FF72 ウ ... FF73

kon3914
質問者

お礼

本当にありがとうございます! そうなんです、自分で作ったわけではなくこちらで拾ったコードを2つ貼り付けてちょっと自分でカスタマイズしてみました。 http://blog.tofu-kun.org/070627210315.php 教えて下さった物の//以下を削除しましてUPしたら http://boueki.xsrv.jp/etc/mojisuucount/mojisuuj20test.html こんな感じになりました。 たぶん全然お話にならないことをしてるんですよね、、、。 ごめんなさい。

kon3914
質問者

補足

あ、勘違いしておりました。 ちょっと頑張ってみます。ありがとうございます!

全文を見る
すると、全ての回答が全文表示されます。
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

こんにちは。 横からですが、先ほどの回答の意味が通じてないみたいなので… 各タグ内に直接onkeyupを指定する方式になさるのであれば、スクリプト内のonload部分(合計約24行分)は不要になります。 ややこしいので、削除しておいたほうが良いでしょう。

kon3914
質問者

お礼

度々ありがとうございます! 不要だったのですね。目からうろこです。 ありがとうございます!

全文を見る
すると、全ての回答が全文表示されます。
  • TYWalker
  • ベストアンサー率42% (281/661)
回答No.2

escape関数で、半角英数字(ASCII)は、そのままになり(「aAbBcC」=>「aAbBcC」)その他の字は %uxxxx(xxxx は4桁の16進数、Unicodeコードポイント)になるようです。 半角カナも、全角カナも、%uxxxxになるからそうなるんですね。 半角カナは %uFF61~%uFF9F になるので、その文字が入ってきたら特別な処理をすればいいと思います。 具体的に言うと %u が現れたら文字数に1を加えてiに3を加えている処理のところで、%uFF61~%uFF9Fが来たら特別に文字数を0.5加えることにするとか。

kon3914
質問者

お礼

そんな難しいルールがあるのですね。。。 読んでも難しいのにそれを言葉に出来るなんては凄いです。 ちなみに 「%u が現れたら文字数に1を加えてiに3を加えている処理のところ」 とはどこでしょうか? 具体的な式とか教えて頂くのは無理ですよね。 ご迷惑おかけしてすみません。

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

strLength()のフローが半角カタカナに対応してないですね。 まぁ要は手を抜いてるってことです。 厳密にチェックしたいなら、文字コードの制限などを把握しながら ご自身で修正を入れる必要があります。

kon3914
質問者

お礼

なるほど対応してないのですね。 全くどうしてよいのやらわかりませんが修正いれれるようやってみます。 ありがとうございます!

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

関連するQ&A

  • 半角/全角 キーを押すとカタカナが出てくるようになりました

    以前は、ひらがなが入力出来る状態の時に半角/全角 キーを押すと半角英数文字を入力できるようになりました。ところが、今では半角/全角 キーを押すと半角のカタカナが入力されるようになってしまったのです。どうしたら元通りになるのでしょうか。お分かりの方いらっしゃいましたら、どうかお教えください。

  • Excel:全角カタカナを入力時に自動的に半角カタカナにしたい

    恐れ入ります。 Excel2007にて全角カタカナをASC関数などで半角カタカナに修正をしているのですが、列がふたつできてしまうため少し面倒です。 (元の全角の列、半角になおした列) 入力時に設定をしてしまうことは可能でしょうか。 入力の際に、カタカナが自動的に半角になるようにできれば とてもたすかります。 ご存じの方、どうぞよろしくお願い致します。

  • 半角カタカナを全角カタカナに変換したい

    Windows2000/Microsoft Excel2000です。 入力されている文字列のカタカナが半角になっているのを 全角に一括変換する数式はありますでしょうか? 英数字は半角のまま残したいのですが。 JISを使うと英数字も全角になってしまいます。 ヘルプいただけると大変助かります。

  • 半角全角について

    数字、アルファベット、カタカナには半角全角がありますがなぜあるのですか?どちらかに統一できないのですか? アルファベットが言語の欧米でも半角全角ってあります?

  • エクセル 関数で全角カタカナを半角にしたい

    エクセル初心者です。人からもらったデータなのですが、住所の記載でカタカナの部分に半角と全角が混ざってしまっています。漢字・ひらがなはすべて全角、カタカナ・数字は半角に統一したいのですが、関数でできますか? 良い方法を教えてください。

  • 半角/全角 キーの切り替えがカタカナになる

    以前は、ひらがなが入力出来る状態の時に半角/全角 キーを押すと半角英数文字を入力できるようになりました。ところが、今では半角/全角 キーを押すと半角のカタカナが入力されるようになってしまったのです。 IME2010のプロパティを規定値に戻すと一旦治るので、 入力設定でひらがなになってしまうとか、 CAPSロックがかかっているとか、 ALT+かなを入力で切り替える等の問題ではないです。 再起動すると、まずは直接入力から立ち上がり、 半角/全角 キーでは入力方法が切り替わらない 直接クリックしてひらがな入力にすると、通常のローマ字入力になりますが、 半角/全角 キーを押すと半角カタカナになる (ひらがな入力と半角カタカナ入力が交互に切り替わる) という症状です OS ウインドウズ7 32ビット PC 東芝ダイナブックです お知恵を拝借できれば幸いです 宜しくお願い致します

  • Excel カタカナと英数字の混在セルでカタカナのみ全角にする

    同じセルの中に、半角カタカナと英数字が混在しています。 カタカナのみ全角にし、英数字は半角の設定のままにする関数を教えてください。 アイウエABCショウジ(半角カタカナ+半角英数字) ⇒ アイウエABCショウジ(全角カタカナ+半角英数字)

  • エクセルの入力規則で、カタカナの半角と全角を同じカタカナとして認識させるには、どうすればいいのですか?教えてください。

    エクセルで、表の中に名前などを入力してもらうのを作り、入力規則を設定して、同じ名前などが入らないようにしたのですが、入力のときに、入力したと半角のカタカナと全角のカタカナで入力規則が働かず、そのまま入力してしまい、困っています。だれか半角カタカナと全角カタカナを入力規則で、同じ文字と認識させる方法を教えてください。

  • ワードで数字の全角を半角に(カタカナは全角のままで)変換するには?

    ワードに100ページの文章があります。全角数字が散在しています。全角数字を半角に直したく、半角操作をかけるとカタカナも半角に変換されてしまいます。数字だけ変換されるようにするには、どのようにしたらいいのでしょうか。ワードの、書式メニュー→文字種の変換→半角、で操作をおこないました。

  • 全角カタカナを半角カタカナへ

    エクセルを使っています。 セルの中の全角カタカナの部分だけを半角カタカナへ 変えるにはどのようにしたらよいでしょうか。 例えば ”アイウエオ 青空 ” → ”アイウエオ 青空 " 複数のセルを上記のようにしたいので宜しくお願いします。