カタカナで入力の際に全角と半角を区別したいのですがどうしたらよいでしょうか?
下記のような数字は全角と半角を区別できるようです。
abc abc
123 123
http://boueki.xsrv.jp/etc/mojisuucount/mojisuuj2 …
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. …
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% …
詳しくまたありがとうございます!
解決はしていないのですが半角カナ認識がこんなに難しいことかと知らず皆様にご迷惑をおかけしてすみません。
自分としては単にモバオークションに出品する際のタイトルを何度も何度も計算しなおして書き直すのが凄い時間がかかったので、個人利用でこういった物があればいいなと思ったんです。
アップロードしなくてもプログラムが動くとは知りませんでした。
また他人の情報が別の人に行ったりと危ないとは知りませんでした。
ここをこう直せば解決ですよ、みたいな簡単なことかと気軽に質問してしまいすみませんでした。
No.5
- 回答日時:
わざわざescapeした文字列を解析するのって面倒なだけでメリット無くないですか?
charCodeAtで文字コード(Unicodeコードポイント)を取得して
場合分けで数え上げるのが素直な方法だと思うのですが。
例えばこんな感じ。
http://www.kanaya440.com/contents/tips/javascrip …
あと
> var strCount = Math.ceil(strLength(str).toString() / 2);
ここのtoStringはあっても誤動作はしませんが無駄です。
せっかく文字列にしてるのにすぐ数値演算してるから、
数値→文字列→数値という不必要な変換がされます。
ありがとうございます!
そうなんですかぁ。
皆様プロなのですね。
いろいろ質問して回答いただき更に難しい語句が出てきて更に混乱している自分がいます。
自分で作るのは無理かなぁと、もちろん超勉強して1年後とかに出来るかもしれませんが、、、。生半可な知識でご迷惑をおかけしてすみません。
どこかこのような物を公開しているところなんてないんですかね?
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
本当にありがとうございます!
そうなんです、自分で作ったわけではなくこちらで拾ったコードを2つ貼り付けてちょっと自分でカスタマイズしてみました。
http://blog.tofu-kun.org/070627210315.php
教えて下さった物の//以下を削除しましてUPしたら
http://boueki.xsrv.jp/etc/mojisuucount/mojisuuj2 …
こんな感じになりました。
たぶん全然お話にならないことをしてるんですよね、、、。
ごめんなさい。
No.2
- 回答日時:
escape関数で、半角英数字(ASCII)は、そのままになり(「aAbBcC」=>「aAbBcC」)その他の字は %uxxxx(xxxx は4桁の16進数、Unicodeコードポイント)になるようです。
半角カナも、全角カナも、%uxxxxになるからそうなるんですね。
半角カナは %uFF61~%uFF9F になるので、その文字が入ってきたら特別な処理をすればいいと思います。
具体的に言うと %u が現れたら文字数に1を加えてiに3を加えている処理のところで、%uFF61~%uFF9Fが来たら特別に文字数を0.5加えることにするとか。
そんな難しいルールがあるのですね。。。
読んでも難しいのにそれを言葉に出来るなんては凄いです。
ちなみに
「%u が現れたら文字数に1を加えてiに3を加えている処理のところ」
とはどこでしょうか?
具体的な式とか教えて頂くのは無理ですよね。
ご迷惑おかけしてすみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「終了していない文字列型の定...
-
gas 全角数字を半角数字に変換
-
正整数の半角数字かどうか判定する
-
VB.NET2003 テキストボックスに...
-
JavaScriptでフォームの入力項...
-
ハイフンだけ置換したい。
-
”吴”とはなんですか?
-
Access VBAで、数字だけをチェ...
-
VC#でテキストボックスに変数の...
-
JavaScriptの正規表現の全角ス...
-
1つのVBAコードをすべてのコア...
-
JSPの処理の途中で、JavaScript...
-
contenteditableで編集した内容...
-
jQuery ui Datepicker 明日以降...
-
ページ遷移時にアコーディオン...
-
JavaScriptで ブラウザの閉じる...
-
csvファイルを読み込み、該当項...
-
PDFフォームで条件つき金額を表...
-
CGIとJavascriptの違いについて
-
javascriptで「オブジェクトを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NET2003 テキストボックスに...
-
gas 全角数字を半角数字に変換
-
VBAによる第3、4水準文字の判定...
-
「終了していない文字列型の定...
-
正整数の半角数字かどうか判定する
-
エクセルVBA/ Formatで文字列が...
-
VC#でテキストボックスに変数の...
-
Excel VBA カタカナ セル判定...
-
JavaScriptでこの正規表現を利...
-
禁止文字チェック
-
エクセル 半角英数6文字以上 ...
-
正規表現について
-
C#でTextBoxに数値のみ入力可能...
-
Visual Basic 6.0 のテキストボ...
-
javascript 文字列の最後から1...
-
Vba SelStart、SelLen教えてく...
-
Javascript 全角カナ+半角スペ...
-
文字数の制限について
-
漢字などを正規表現でパターン...
-
”吴”とはなんですか?
おすすめ情報