- ベストアンサー
半角空白チェックについて
いつもお世話になっております。 javascriptで半角空白チェックを行っております。 その場合に、半角空白のJISコードは キーボードから入力した場合は「0x20」 (Unicodeでも「0x20」) 代替文字列( )の場合は「0xa0」 (Unicodeでは「0xf8f0」??) となります。 両方とも半角空白と扱いたいため以下のようなロジックを用いています。 【javascript部】 function chk_han_kuhaku(i_char) { for( i=0; i<i_char.length; i++ ){ var c = i_char.charCodeAt(i); // Unicodeで比較 if ((c == 0x20) || (c == 0xf8f0)) { alert(i + "文字目は半角空白です。"); } else { alert(i + "文字目は半角空白ではありません。"); } } } 【html部】 <input type="button" value="test" onclick="javascript:chk_han_kuhaku(' abc de f')"> この場合、「0x20」はif文でhitしますが 「0xf8f0」にはif文でhitしません。 どういった対処が必要でしょうか? どなたかご教授下さい。 環境は OS:WindowsXP SP2 ブラウザ:IE6 です。 宜しくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
なんか・・・・とてつもなく「変なこと」をしていませんか? まるで、VBか何かのPGを見ているような気がしますが。 要は文字列中に、半角空白が含まれているか否かを判定したいのですよね? function chk_han_kuhaku(i_char) { if(i_char.search(/ /)>-1) alert("半角空白を含んでいます。"); if(i_char.search(/' /)>-1) alert("半角空白を含んでいます。"); } こういうシンプルな構造にしたほうが宜しくないですか? もしどうしても、文字位置が必要なら var Arr=i_char.search(/ | /g); で文字位置の配列が取得できる筈。 目的が空白文字の排除なら、 i_char.replace(/ | /g,''); で一発の筈。 無闇にループで一文字づつチェックする理由が、あたしにはちょっと良く解りません。
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
横からごめんなさい >しかし、JISコードで比較することになりますが >charCodeAtは正しくはUnicodeを返す仕様と認識しています。 charCodeAt は、Unicode を返す仕様ということは、返ってきたものはUnicode でのコードだと思いますよ。 0xA0のコードにおいてはUnicode, JIS, ASCII は同じだと考えて良いと思います。 ところで、0xf8f0 については、どこからでてきたんでしょうか?
function chk_han_kuhaku(i_char) { for( i=0; i<i_char.length; i++ ){ var c = i_char.charCodeAt(i); // Unicodeで比較 if ((c == 0x20) || (c == 0xA0 )) { alert(i + "文字目は半角空白です。"); } else { alert(i + "文字目は半角空白ではありません。"); } } }
お礼
ご回答ありがとうございます。 上記方法で正しく動作します。 しかし、JISコードで比較することになりますが charCodeAtは正しくはUnicodeを返す仕様と認識しています。 その他、対応方法等あればご教授ください。 宜しくお願いします。