全角の英数字を半角に変換する方法

このQ&Aのポイント
  • フォームに電話番号や郵便番号を入力する際に、強制的に半角入力する方法を紹介します。
  • カスタム関数「chkCode(id)」を使用し、メモ帳などからコピー&貼り付けをした場合にも全角の英数字が自動で半角に変換されるようにします。
  • 記号を全角から半角に変換する方法については、独自の方法が必要です。アドバイスをお待ちしています。
回答を見る
  • ベストアンサー

全角の英数字と記号を半角に変換する方法について

フォームに電話番号や郵便番号を入力する時に、 強制的に「"ime-mode: disabled;"」で半角入力するようにし、 カスタム関数「 chkCode(id)」を使いメモ帳などからコピー&貼付けをした時に、 全角の英数字が自動で半角の英数字に変換されるにしました。 いろいろと調べてみたのですが、記号を全角から半角に変換する方法が分かりません。 ゴールまであともう少しのところまでなのですが、 アドバイスを頂ければ幸いです。 よろしお願いいたします。 【スクリプト】 <!--半角変換ー--> function chkCode(id) { work=''; for (lp=0;lp<id.value.length;lp++) { unicode=id.value.charCodeAt(lp); if ((0xff0f<unicode) && (unicode<0xff1a)) { work+=String.fromCharCode(unicode-0xfee0); } else if ((0xff20<unicode) && (unicode<0xff3b)) { work+=String.fromCharCode(unicode-0xfee0); } else if ((0xff40<unicode) && (unicode<0xff5b)) { work+=String.fromCharCode(unicode-0xfee0); } else { work+=String.fromCharCode(unicode); } } id.value=work; } 【フォーム】 <input type="text" name="text01" value="連絡先" size="60" style="width:300px;" "ime-mode: disabled;" onkeyup="chkCode(this);" onfocus="if (this.value == defaultValue) this.value = '';" onblur="if (!this.value) this.value = defaultValue;">

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

  • ベストアンサー
  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.3

これでどうですか? s=id.value[lp] s={"ー":"-","@":"@","_":"_"}[s]||s unicode=s.charCodeAt(0);

yumi007
質問者

お礼

的確なアドバイスをありがとうございました。 おかげさまで、スクリプトの部分をほとん修正せずに、 目的どおりに動作するようになりました。 本当にありがとうございました。

その他の回答 (2)

  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.2

unicode=id.value.charCodeAt(lp); を s=id.value s={"ー":"-","@":"@","_":"_"}[s]||s unicode=s.charCodeAt(lp);

yumi007
質問者

補足

ご教授頂き、ありがとうございました。 教えて頂きましたとおりにしたところ、 記号も半角英数に自動変換されるようになりました。 しかしながら、「@1@」と入力をしますと、 1回目の「@」は半角に自動変換されるものの、 2回目の「@」は全角のまま自動変換されませんでした。 再度、アドバイスを頂ければ幸いです。 よろしくお願いいたします。

  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.1

記号って番号系なら「ー」でしょ? ならif(unicode=="ー")unicode="-" でOK もっと沢山あるなら unicode={"ー":"-","@":"@","¥":"\"}[unicode]||unicode みたいな感じで

yumi007
質問者

補足

さっそくのアドバイスありがとうございます。 教えて頂いたものをどこに追加すれば良いかを、 ご教授頂けますでしょうか? よろしくお願いします。

関連するQ&A

  • フレーム内のJavaスクリプトの制御方法について

    textとtextareaフォームに文字を入力する際の制御について どのようにすれば良いかご教授頂けばと思います 【やりたい事】 textとtextareaに文字を入力するときに、 「ime-mode: disabled」を使いIMEを直接制御し、 コピー&貼付け対策のため「JavaScript」で、 全角より半角に自動変換されるように制御しました。 下記のソースをhtmlファイルに記述しています。 しかしながら、フレーム内に該当htmlファイルを設定すると、 「ime-mode: disabled」と「JavaScript」で制御している 全角から半角へ自動変換が機能しなくなります。 動作環境は、IE7 ~ IE9を想定しています。 サンプルファイルを下記にアップしました。 https://box.yahoo.co.jp/guest/viewer?sid=box-l-uuwbyy42v2bpqxq7lxcoosuyni-1001&uniqid=65c3cea9-7cd0-4b71-bc86-3213de26599e 出来るだけシンプルな方法で解決策があればご教授をお願いいたします。 【ソース】 ・text: <input type="text" name="text01" value="1入力してください" size="60" style="width:450px;" style="ime-mode: disabled;" onkeyup="chkCode(this);" onfocus="if (this.value == defaultValue) this.value = '';" onblur="if (!this.value) this.value = defaultValue;"> ・textarea: <textarea name="textarea01" id="textarea01" cols="60" rows="5" style="ime-mode: active;" onfocus="if(this.value == this.defaultValue) this.value=''" onblur="if(this.value == '') this.value=this.defaultValue"> ・JavaScrpt: function chkCode(id) { work=''; for (lp=0;lp<id.value.length;lp++) { s=id.value[lp] s={"ー":"-","@":"@","_":"_","/":"/","¥":"?","&":"&","%":"%"}[s]||s unicode=s.charCodeAt(0); if ((0xff0f<unicode) && (unicode<0xff1a)) { work+=String.fromCharCode(unicode-0xfee0); } else if ((0xff20<unicode) && (unicode<0xff3b)) { work+=String.fromCharCode(unicode-0xfee0); } else if ((0xff40<unicode) && (unicode<0xff5b)) { work+=String.fromCharCode(unicode-0xfee0); } else { work+=String.fromCharCode(unicode); } } id.value=work; }

  • 全角文字を半角にすると全角の”と’が変換されない理由と対策を!?

    String.prototype.toAscii = function(){ return this.replace(/([!-~ ])/g, function (char){return String.fromCharCode(char.charCodeAt(0) - 65248)} ); } タイトル通りです。全角の「”」と「’」が半角文字に変換されません。 その理由と対策を教えていただけますか? それと、根本的にこんなやりかたは、だめなのでしょうか?

  • 全角英数字を自動的に半角変換するソース

    全角英数字を自動的に半角変換するソース パソコン初心者です。 以下は、 フォームに入力された全角英数字を自動的に半角に変換するソース(Javascript)のようなんですが どういった意味なのかよくわかりません。 一体どういう仕組みなんですか?? function zentohan(obj){ if(typeof(obj.value)!="string")return false; var han= '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@-.,:'; var zen= '1234567890abcdefghijklmnopqrstuvwxyz            ABCDEFGHIJKLMNOPQRSTUVWXYZ@-.,:'; var word = obj.value; for(i=0;i<zen.length;i++){ var regex = new RegExp(zen[i],"gm"); word = word.replace(regex,han[i]); } obj.value = word; }

  • textとtextareaの書式に設定について

    先日、質問をさせて頂きました者になります。 input textとtextareaの書式の設定制御の方法が、 分からなくなってしまい質問をさせて頂きました。 【やりたい事】 textやtextareaの初期値のテキスト色とバックグランの色を、 textやtextareaに初期値が入っている時と入力した値が入っている時に、 指定した書式に各種設定したいと思っています。 具体的には、textやtextareaに初期値が入っている時には、 初期値の文字を薄いグレー色に設定し、バックグランドをピンク色に設定し、 textやtextareaに入力をした値が入っている時には、 入力した文字を黒色に設定し、バックグランドを白色に設定したいと思ってます。 ご教授頂ければと存じます。 よろしくお願いいたします。 【ソース】 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN Frameset" "http://www.w3.org/TR/html4/frameset.dtd"> <html> <head> <script type="text/javascript"> <!--ログ生成スクリプトを取得--> function textoutput(formObj) { <!--text01を取得--> if((text01 = formObj.elements["text01"].value)==formObj.elements["text01"].defaultValue)text01=""; <!--text02を取得--> if((text02 = formObj.elements["text02"].value)==formObj.elements["text02"].defaultValue)text02=""; <!--textarea01を取得--> if((textarea01 = formObj.elements["textarea01"].value)==formObj.elements["textarea01"].defaultValue)textarea01=""; <!--textarea02を取得--> if((textarea02 = formObj.elements["textarea02"].value)==formObj.elements["textarea02"].defaultValue)textarea02=""; <!--出力データを作成--> var text = ''; <!--text3データを作成--> if(text01!==""){ text += '質問1:' + '\n'+ text01 + '\n'; } <!--text2データを作成--> if(text02!==""){ text += '質問2:' + '\n'+ text02 + '\n'; } <!--textarea01データを作成--> if(textarea01!==""){ text += '質問3:' + '\n'+ textarea01 + '\n'; } <!--textarea02データを作成--> if(textarea02!==""){ text += '質問4:' + '\n'+ textarea02 + '\n'; } <!--出力データを作成--> formObj.elements["output"].value=text; } </script> </head> <body> <form name="form01"> <strong>・諮問1:</strong><br> <input type="text" name="text01" value="1入力してください" id="p1" size="30" class="disabled" onfocus="if (this.value == defaultValue) this.value = '';" onblur="if (!this.value) this.value = defaultValue;"><br> <strong>・諮問2:</strong><br> <input type="text" name="text02" value="2入力してください" id="p2" size="30" class="disabled" onfocus="if (this.value == defaultValue) this.value = '';" onblur="if (!this.value) this.value = defaultValue;"><br> <strong>・諮問3:</strong><br> <textarea name="textarea01" id="textarea01" cols="60" rows="5" onfocus="if(this.value == this.defaultValue) this.value=''" onblur="if(this.value == '') this.value=this.defaultValue"> 3入力してください </textarea><br> <strong>・諮問4:</strong><br> <textarea name="textarea02" id="textarea02" cols="60" rows="5" onfocus="if(this.value == this.defaultValue) this.value=''" onblur="if(this.value == '') this.value=this.defaultValue"> 4入力してください </textarea><br> <strong>・出力結果:</strong><br> <input type="button" value="ログ出力" onClick="textoutput(this.form);">&nbsp;<br> <textarea cols=60 rows=20 name="output" id="output"></textarea><br> <textarea id="text" cols="30" rows="5" wrap="soft"></textarea><br> <button onclick="save();">save</button><a id="anchor" href=""></a> </form> </body> </html>

  • (Swing)JTextFieldを半角のみ入力可能にする方法

    JTextField で半角のみ入力可能なチェックを行いたいのですがどうもうまくいきません。 下記のソースは、入力桁数制限チェックと、全角チェックを行っているのですが 半角を入力した後に全角を入力すると、JTextFieldの値が消えてしまいます。 どなたがご指導よろしくお願いします。 もしくは、下記ソースの他によいチェック方法等ありましたら、教えてくださいm(__)m よろしくお願いいたします。 ======================================= userText.setDocument( new LimitedDocument( 8) ); /** * 指定文字数・全角チェック */ private class LimitedDocument extends PlainDocument { int limit; LimitedDocument( int limit ){ this.limit = limit; } public void insertString( int offset, String str, AttributeSet a ) { try{ String wholeText = getText( 0, getLength() ); // 文字数チェック byte[] b = wholeText.getBytes(); if( b.length >= limit ){ return; } char c = str.charAt(0); // 文字が半角だったら挿入する。 if (c < 256 || (c >= 0xff61 && c <= 0xff9f)) { super.insertString(offset, String.valueOf(c), a); } else { } } catch( BadLocationException e ) { System.out.println( e ); } } } =======================================

    • ベストアンサー
    • Java
  • 半角英数字のみの入力にエラーを返すには

    運営しているサイトに設置したコメントフォームからスパムがたくさん送信されてきます。 その対策として、「氏名のよみがな」入力欄が半角英数字のみの入力の場合にはアラートを出して投稿できないようにしたいです。 下記のようなJSを使用していますが、 if (!kana) { alert('氏名のよみがなを入力してください。'); return false; } の部分を変更して「半角英数字しか入力されていない場合、アラートを返す」ようにするには、どうしたら良いでしょうか? htmlの文字コードはShift_JISです。 よろしくお願いします。 function postComment { var name = eval('document.name.value'); var kana = eval('document.kana.value'); var email = eval('document.email.value'); var comment = eval('document.comment.value'); sum++; if (!name) { alert('氏名を入力してください。'); return false; } else { if (!kana) { alert('氏名のよみがなを入力してください。'); return false; } else { if (!email) { alert('メールアドレスを入力してください。'); return false; } else { if (!comment) { alert('コメントを入力してください。'); return false; } else { var confirm_text = '以下の内容で送信します\n' + 氏名:' + name + '\n よみがな:' + kana + '\n メール:' + email + '\n 本文:' + comment; if (!confirm(confirm_text)) { return false; } else { alert('コメントを送信しました。'); } } } } } }

  • 半角文字と全角文字の区別

    以下のように、Stringに文字列を読み込んで、 400文字(半角)以上の場合は、メッセージを出したいのですが、 全角でも400文字まで、NGになりません。 どうすれば、判定できるのでしょうか? 教えて下さい。 例 JTextArea txtArea = new JTextArea(); String memo = txtArea.getText(); if(memo.length()>400){ // 400文字(半角)以内にして下さい。 // NG ! }else{ // OK ! }

    • ベストアンサー
    • Java
  • フォームに入力した値の制御について

    フォームに入力した値の制御について いろいろと調べてみたのですが、 どうすれば良いか分からないので、 質問をさせて頂きました。 【概要】 フォームの[text]と[textarea]に入力をしてもらいたい 入力値のサンプルを表示されるようにしました。 カーソルを[text]と[textarea]に入れると、 入力値のサンプルの表示が消えて入力出来るようにしました。 【やりたい事】 [text]と[textarea]に入力をしてもらった値を、 最終的にtextareaに出力させるようになっています。 何も入力せず出力をさせると、サンプル値は出力されてしまいます。 [text]と[textarea]に入力をした値のみ出力させることは可能でしょうか。 ご教授頂ければと思います。 よろしくお願いいたします。 【ソース】 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN Frameset" "http://www.w3.org/TR/html4/frameset.dtd"> <html> <head> <script type="text/javascript"> <!--ログ生成スクリプトを取得--> function textoutput(formObj) { <!--text01を取得--> var text01 = formObj.elements["text01"].value; <!--text02を取得--> var text02 = formObj.elements["text02"].value; <!--textarea01を取得--> var textarea01 = formObj.elements["textarea01"].value; <!--textarea02を取得--> var textarea02 = formObj.elements["textarea02"].value; <!--出力データを作成--> var text = ''; <!--text3データを作成--> if(text01!==""){ text += '質問1:' + '\n'+ text01 + '\n'; } <!--text2データを作成--> if(text02!==""){ text += '質問2:' + '\n'+ text02 + '\n'; } <!--textarea01データを作成--> if(textarea01!==""){ text += '質問3:' + '\n'+ textarea01 + '\n'; } <!--textarea02データを作成--> if(textarea02!==""){ text += '質問4:' + '\n'+ textarea02 + '\n'; } <!--出力データを作成--> formObj.elements["output"].value=text; } </script> </head> <body> <form name="form01"> <strong>・諮問1:</strong><br> <input type="text" name="text01" value="1入力してください" id="p1" size="30" class="disabled" onfocus="if (this.value == defaultValue) this.value = '';" onblur="if (!this.value) this.value = defaultValue;"><br> <strong>・諮問2:</strong><br> <input type="text" name="text02" value="2入力してください" id="p2" size="30" class="disabled" onfocus="if (this.value == defaultValue) this.value = '';" onblur="if (!this.value) this.value = defaultValue;"><br> <strong>・諮問3:</strong><br> <textarea name="textarea01" id="textarea01" cols="60" rows="5" onfocus="if(this.value == this.defaultValue) this.value=''" onblur="if(this.value == '') this.value=this.defaultValue"> 3入力してください </textarea><br> <strong>・諮問4:</strong><br> <textarea name="textarea02" id="textarea02" cols="60" rows="5" onfocus="if(this.value == this.defaultValue) this.value=''" onblur="if(this.value == '') this.value=this.defaultValue"> 4入力してください </textarea><br> <strong>・出力結果:</strong><br> <input type="button" value="ログ出力" onClick="textoutput(this.form);">&nbsp;<br> <textarea cols=60 rows=20 name="output" ></textarea> </form> </body> </html>

  • PHP 全角・半角・英数字 エラー判定

    PHPを独学で勉強しているものです、あるサイトを構築中で、入力内容のエラー判定をしたいのですが、どうしても半角英字がエラーではじかれず、どなたかご指導いただけますでしょうか。 PHPのバージョンは5.2で、DBはMySQLでユーザーがある情報を登録できるサイトで、データ型にあわせるため、1以上の半角数字のみ受け付けるようにしたいです。 入力欄は3か所で、$ic0、$ic1、$ic2に格納されています。 入力が全角数字の場合はそれぞれを半角数字に自動変換したいとおもっています。 自作したものは下記の通りです。 宜しくお願い致します。 /*エラー判定*/ $ic_check=$ic0.$ic1.$ic2; if(preg_match("/^[0-9]+$/", $ic_check)){ if($ic0=="0" || $ic1=="0" || $ic2=="0"){ $error_msg="1以上の数字を入れてください。"; }else{ $error_msg=""; } } elseif(preg_match("/^[0-90-9]+$/",$ic_check)){ $ic0=mb_convert_kana($ic0, "n", "Shift_jis"); $ic1=mb_convert_kana($ic1, "n", "Shift_jis"); $ic2=mb_convert_kana($ic2, "n", "Shift_jis"); if($ic0=="0" || $ic1=="0" || $ic2=="0"){ $error_msg="1以上の数字を入れてください。"; }else{ $error_msg=""; } } elseif(preg_match("/^[a-zA-Z]+$/",$ic_check)){ $error_msg="半角数字で入力してください"; } else{ $error_msg="半角数字で入力してください"; }

    • ベストアンサー
    • PHP
  • 半角カタカナ→全角カタカナ変換がうまくいきません。

    お世話になっております。 フォームから入力された文字を、 「半角カタカナ→全角カタカナ」変換したいのですがうまくいきません。 コーディングは以下の通りですが、問題の箇所がわかりません。 どなたかご教授ください。 なお、jcode.plは、最新のものを使っています。 #↓=============================================== ##### フォームデータ受け取り if ($ENV{'REQUEST_METHOD'} eq 'POST') {  read( STDIN , $buffer , $ENV{'CONTENT_LENGTH'} ); } else {  $buffer = $ENV{'QUERY_STRING'}; } # 文字コードを正確に取得するために,全ての送信データをいったん文字コードチェックする $buffer1 = $buffer; $buffer1 =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; $kcode = &jcode::getcode(*buffer1); @pairs = split(/&/ , $buffer); ##### フォームデータのデコード、漢字コードをsjisに変換 foreach $pair (@pairs) {  ($k,$v) = split(/=/,$pair);  $v =~ tr/+/ /;  $v =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;  &jcode'convert(*v,"sjis",$kcode);  # 半角カナを全角に変換  if($kcode eq 'sjis') {   &jcode::h2z_sjis(\$v);  }  if($kcode eq 'euc') {   &jcode::h2z_euc(\$v);  }  if($kcode eq 'jis') {   &jcode::h2z_jis(\$v);  }  $in{$k} = $v; } #↑=============================================== (なお、全角スペースは、半角スペースなどに変更願います。) よろしくお願いします。

専門家に質問してみよう