全角文字のチェック方法を教えてください

このQ&Aのポイント
  • BASP21を使わずに、VBScriptを使用して入力項目の全角文字のチェックを行いたいです。
  • 現在、入力値がシフトJISの全角文字コードに当てはまるかどうかを確認するために、BASP21を使用しています。
  • Windows XP SP2の環境でVBScriptとIISを使用しています。
回答を見る
  • ベストアンサー

正規表現を使った全角文字のチェック。

現在入力項目が全角文字OR半角スペースかどうかチェックする、スクリプトをBASP21を使って下のようなコードを作っています。VBSで色々試しましたができません。 本番では、BASAP21が使えないので困っています。 処理としては、入力値が、シフトJISの全角に当たる文字コードかどうかチェックしています。 BASP21を使わない方法で可能でしょうか? また可能であれば方法を教えてください。 環境:WindowsXPSP2 VBScript IIS LOCALHOST上で実行しています。 例: str = " あいうえおア " Set bobj = CreateObject("basp21") output = bobj.Match("/^(?:[\x81-\xEF][\x40-\xFC]|\x20)+$/",str) IF output = 0 THEN Response.Write("全角で入力して下さい。") END IF

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

  • ベストアンサー
  • 9arabi
  • ベストアンサー率32% (140/433)
回答No.1

まず、半角スペースを置換してしまったものに対して、 バイト数と文字数を比較し、 同じであれば半角のみの文字列である。 という考え方でするとよいのでは?

cybert
質問者

お礼

なるほど。 1:半角SPを全角SPに置き換え 2:文字数をカウント 3:IF 文字数*2 = バイト数 4:TRUEなら全角ですよね。 着眼点が素晴らしいですね。 ありがとうございます。 でもやっぱり正規表現でやりたいです。。。

関連するQ&A

  • 全角文字のチェック

    現在C言語を勉強しております。 そこで、キーボードから入力された文字列のチェックを行う関数を作成したいのですが、実装方法が分かりません・・・。 以下に仕様と私の作成したソースを貼ります。 【許可する文字】は、 全角のひらがな 全角の英語(大文字も小文字もOK) 全角の数字 です。 チェックする関数を作成したいのですが、以下ではうまくいかず・・・ 教えてくださいorz 比較の仕方がおかしいのかな・・・とは思っているんですが。 関数は、引数として渡された文字列に許可以外の文字が含まれている場合は1を、そうでなければ0を返す、という仕様にしたいです。 int checkName(char *str) { int i; for(i = 0; str[i] != '\n'; i++){ /* 奇数バイトをチェック */ if(str[i] != 0x82){ return 1; }else{ i++; /* ひらがな以外の場合 */ if(str[i] < 0xa0 && str[i] > 0xf1) /* 英語(大文字)以外の場合 */ if(str[i] < 0x60 && str[i] > 0x79) /* 英語(小文字)以外の場合 */ if(str[i] < 0x81 && str[i] > 0x9a) /* 数字の場合 */ if(str[i] < 0x50 && str[i] > 0x58) /* 許可する文字に該当しなかった場合は1を返す */ return 1; } } return 0; } 上記ソースの「(str[i] != 0x82)」は比較の仕方としておかしいでしょうか? 以上、よろしくお願いいたします。

  • 全角文字の判定

    現在C言語を勉強しております。 そこで、キーボードから入力された文字列のチェックを行う関数を作成したいのですが、実装方法が分かりません・・・。 以下に仕様と私の作成したソースを貼ります。 【許可する文字】は、 全角のひらがな 全角の英語(大文字も小文字もOK) 全角の数字 です。 チェックする関数を作成したいのですが、以下ではうまくいかず・・・ 教えてくださいorz 比較の仕方がおかしいでしょうか? 関数は、引数として渡された文字列に許可以外の文字が含まれている場合は1を、そうでなければ0を返す、という仕様にしたいです。 int checkName(char *str) { int i; for(i = 0; str[i] != '\n'; i++){ /* 奇数バイトをチェック */ if(str[i] == 0x82){ i++; /* ひらがなの場合 */ if(str[i] >= 0xa0 && str[i] <= 0xf1) printf("ひらがな\n"); return 0; /* 英語(大文字)の場合 */ if(str[i] >= 0x60 && str[i] <= 0x79) printf("英語大\n"); return 0; /* 英語(小文字)の場合 */ if(str[i] >= 0x81 && str[i] <= 0x9a) printf("英語小\n"); return 0; /* 数字の場合 */ if(str[i] >= 0x50 && str[i] <= 0x58) printf("数字\n"); return 0; } return 1; } return 0; } 以上、よろしくお願いいたします。

  • 正規表現を使った入力値のチェック

    こんにちは、yukimura1024です。 perlでブラウザのフォームに入力された値をチェックしたいのですが、 入力された値が「全角文字のみか」と「全角カタカナのみか」 という2種類のチェックのしかたがわかりません。 「数値のみか」のチェックは正規表現を使ってできたのですが、 これと同じように正規表現を使って、この2つの全角チェックをする 方法はないでしょうか? 数値チェックは以下の方法でやっています↓ if ($str_txt_yuubin =~ /[^0-9]/) { print "「郵便番号」を半角数字で入力してください。<br>\n"; } ご存知の方がいましたら教えていただけると助かります。 よろしくお願い致します。

    • ベストアンサー
    • Perl
  • PHPの正規表現の意味を教えて下さい。

    以下のサイトで全角チェックをPHPの正規表現で判断しているサンプルがあります。 http://programmer-toy-box.sblo.jp/article/17522872.html 上記のサイトでのチェックは以下のようになっています。 > if (!preg_match("/(?:\xEF\xBD[\xA1-\xBF]|\xEF\xBE[\x80-\x9F])|[\x20-\x7E]/", $str)) { Unicodeを利用した正規表現で半角文字の範囲を指定しており、 この範囲に一致しなければ、全て全角と判断しています。 さて、ここで質問なのですが、 正規表現の後半部分、 [\x20-\x7E] は 空文字~~(チルダ)を表現していると理解できます。 しかし、前半部分 \xEF\xBD[\xA1-\xBF]|\xEF\xBE[\x80-\x9F] の意味がわかりません。 WikipediaのUnicode 一覧のページを見ると、 \xEF\xBD[\xA1-\xBF]は ï½ の次に、¡ から ¿ のいづれかの文字が続く文字列を表現していると 思うのですが、これは、半角文字を表現した物なのでしょうか?? そもそも、理解の仕方が違うのでしょうか?? ご存知の方いらっしゃいましたら、ご教授お願いします。 ※WikipediaのUnicode 一覧のページ http://ja.wikipedia.org/wiki/Unicode%E4%B8%80%E8%A6%A7_0000-0FFF

    • ベストアンサー
    • PHP
  • 正規表現で全角文字を全て削除したい

    正規表現を使ってアスキーコード文字以外の全角文字を全て削除しようとしたのですが、ユーロ記号 € が削除できませんでした。 以下は英小文字以外全て削除しようとしたものです。 英小文字以外や全角文字は削除できているようですが、ユーロ記号が削除されません。 mb_ereg_replace ('[^a-z]', "", $str); error_logを使って確認してみるとそもそもブラウザから送られてきたきた時点で &#8364; となっています。(ユーロ記号そのものがこの場に表示されてしまうので全角で明記していますが実際は7文字全て半角です。) これが正しい挙動なのかどうかも判断がつきかねています。(コード番号そのものはユーロ記号のようですが) error_log($_POST['moji'], 0); 以下のようにアスキーコード以外全て削除という指定も削除されませんでした。 &#8364; をアスキーコード7文字として一つ一つ処理しているようです。 mb_ereg_replace ('[^\x00-\x7f]', "", $str); ちなみにこの &#8364; の入った $str をHTMLを使いブラウザに出力してやるとちゃんとユーロ記号が表示されます。 <pre>{$str}</pre> mb_internal_encodingやmb_regex_encodingの設定などいろいろ試してみたのですがうまくいきませんでした。 この文章を書いていて今思ったのですが、ひょっとしてまず &#と; で挟まれたものを削除するというのがこの問題の一般的な解決方法なのでしょうか。そうすればユーロ記号 &#8364; も削除できますし。もしそうならその辺の事情も解説あるいはURL明記していただけると助かります。 (でもこれ、アスキーコードは残したい場合にたまたま &#8364; というユーロ記号を意図しないただの半角7文字の文が入力されてきてしまっても削除されるということになっちゃいますね。これはやっぱりしょうがないのですかね。) よろしくお願いします。

    • ベストアンサー
    • PHP
  • 文字コードチェックについて

    題記の文字コードチェックについて教えていただきたいのですが、 入力情報に対して、S-JISのある範囲内の文字コードに該当していればエラーとするような文字コードチェックをしたいのですが、 どのようにすればよいでしょうか? 下記のコードも文字コードのチェックなのですが、これだとUnicodeでのチェックになってしまいます。 どうにかしてS-JISでチェックしたいのですがやり方がわかりません。。 よろしくお願い致します。 コード---------------------------------------- public class CodeCheck {  public static void main(String[] args) {   String str = "a";   char ch = str.charAt(0);   if(ch == 0x2460) {    // エラー処理   } else {    // 正常処理   }  } } ---------------------------------------------

    • ベストアンサー
    • Java
  • 文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結

    文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結果? 下記コードのように「文字列に半角・全角スペースが入っているかをチェックする関数」を作りました。 $textに入る文字列に半角・全角のスペースが入っているかをチェックします。 -------------------------------------------- my $text = "東 京"; if( isSpace($text) ) {   print "スペースあり"; } else {   print "スペースなし"; } sub isSpace{   my $str = shift || return(undef);   if( $str =~ /.*[\s ]+.*/ ){     return(1);   }else{     return(0);   } } -------------------------------------------- しかしなぜか1行目を my $text = "メ"; とするとスペースが入っているという結果になってしまいます。 なぜ「メ」が入ると半角もしくは全角のスペースとみなされてしまうのでしょうか? また、どうすれば正しくチェックできるようになりますか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • 全角文字を含んだ文字の並びを逆順にするには?

    こんにちは。 C言語において、以下のような2つの関数を利用して、全角文字を含んだ文字列の並びを逆順にする事を考えました。 ちなみにコンパイラは、borlandのC++コンパイラを使っています。 文字コードがShift_JISの場合、全角文字の上位バイトが0x81~0x9F、0xE0~0xFCの範囲に収まるという事を聞いたので、まず、以下のように、渡された文字が、全角文字の上位バイトかどうかを判定する関数を作りました。 ____________________________________________________________ int is_2byte(unsigned char c){ return ( ( (c >= 0x81) && (c <= 0x9f) ) || ( (c >= 0xe0) && (c <= 0xfc) ) ); } ____________________________________________________________ 次に、上の関数を利用し、以下のように、渡された文字列の、文字の並びを逆順にする関数を作りました。 ____________________________________________________________ void rev_str(char *str) { char temp[1000]; char tmp; int i, j; for(i=strlen(str)-1, j=0; i>=0; i--, j++){ temp[j]=str[i]; if(is_2byte(temp[j])){ tmp=temp[j-1]; temp[j-1]=temp[j]; temp[j]=tmp; } } temp[j]='\0'; strcpy(str, temp); } __________________________________________________ この関数を、あいうえお順に試して行った所、ひらがなの 「あいうえお かきくけこ さしすせそ たちつてと なにぬねの はひふへほ まみむめ」 という文字列は、逆順にする事ができたのできました。 しかし、「も」以降の文字を含ませた途端、実行時エラーが発生し、プログラムがストップしてしまいます。 また、カタカナの場合は、「メ」以降の文字を含ませた場合に、実行時エラーとなります。 何が問題なのかが全然分からないので、困っています。 何かいい方法を知っておられる方がいらっしゃれば、是非アドバイスを頂きたいと思います。 では、よろしくお願い致します。

  • Excel : 正規表現を利用して2文字の全角数字を半角数字に変換するには?

    アクティブセルの文字を、正規表現を利用して文字の変換をしたいと考えています。 2文字の全角数字を半角数字に変換します。 かつ、3文字以上の全角数字は変換しません。 下記のようにコードを書いたのですが、希望通りに動作してくれません。 どこが悪いのでしょうか? ご指摘いただければ幸いです。 よろしくお願いいたします。 ※参照可能なライブラリファイルにて、「Microosft VBScript Regular Expressions 5.5」に  チェックは入れています。 Sub sample()   Dim str   Dim strPattern As String   Dim strReplacement As String      str = ActiveCell.Value   str = myRegExp(str, "([^0123456789])([0123456789]{2})([^0123456789])", "$1$2$3")   ActiveCell.Value = str End Sub Private Function myRegExp(str, strPattern, strReplacement)   Dim objRegExp As RegExp   Dim test As String   Set objRegExp = New RegExp   With objRegExp     .Pattern = strPattern     .IgnoreCase = False     .Global = True     myRegExp = .Replace(str, "$1" & StrConv("$2", vbNarrow) & "$3")   End With   Set objRegExp = Nothing End Function

  • 正規表現による文字列のチェックについて

    文字列の入力チェックで困っています。 入力された文字列が以下の文字のみで構成されているか、正規表現でチェックするにはどうすれば良いか教えてください。 できれば一発でチェックしたいです。 ・全角(漢字、ひらがな、かたかな)※英数字を含め、左記以外の全角は使用禁止 ・半角英数字 ・半角記号(「-」「.」「:」「*」「&」)※後から追加変更される可能性がある Java(UTF-8)とJavaScript(Shift-JIS)それぞれで対応できる方法をお願いいたします。

専門家に質問してみよう