カタカナで入力の際に全角と半角を区別したいのですがどうしたらよいでしょうか?
下記のような数字は全角と半角を区別できるようです。
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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「終了していない文字列型の定...
-
javascriptの効かないサーバー...
-
JSPの処理の途中で、JavaScript...
-
ローカルのレジストリを読みたい
-
alert()が実行できない
-
if(1){...}とはどういうことで...
-
ファイルサイズの取得
-
javascriptからサーバサイドの...
-
ページを一回だけリロードさせ...
-
htmlのfileタグに自動で値を入...
-
PowerPointで時計表示
-
jsファイルを閲覧者がダウンロ...
-
CGIとJavascriptの違いについて
-
ページ遷移時にアコーディオン...
-
VB.Net Imagelistにイメージを...
-
C#コンストラクタが2回動く
-
「記事の折りたたみ・展開」に...
-
Illustrator でjavascriptによ...
-
メニューをリンクにするには
-
C#でボタン名を変更しても動く
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NET2003 テキストボックスに...
-
VBAによる第3、4水準文字の判定...
-
「終了していない文字列型の定...
-
gas 全角数字を半角数字に変換
-
正整数の半角数字かどうか判定する
-
VC#でテキストボックスに変数の...
-
Vba SelStart、SelLen教えてく...
-
禁止文字チェック
-
ハイフンだけ置換したい。
-
文字認証の問題
-
Visual Basic 6.0 のテキストボ...
-
CListCtrl の特定のセル(アイ...
-
エクセルVBA/ Formatで文字列が...
-
初期入力モードを半角カタカナ...
-
外字のチェック
-
Excel VBA カタカナ セル判定...
-
JavaScriptの正規表現の全角ス...
-
EXCEL 文字列操作
-
JavaScriptでこの正規表現を利...
-
漢字を数字に変換
おすすめ情報