HyperCard tribute

半角・全角・数字をチェックする


 コンピュータにおいて半角・全角・数字を区別しなければならない場所は数多くあります。例えば、計算をするためには、半角で書かれた数字でなければ計算できません。コンピュータは全角では「文字である」と認識してしまうからです。他にも、全角と半角の大きさの違いから予期した位置からずれてしまうなどという問題が起こることもあります。
 これらの問題を防ぐため、入力されたデータをチェックして半角禁止の場合は半角の文字が入力できないように、全角禁止の場合は全角の文字が入力できないようにしてみます。

 以下のスクリプトは、ask命令を用いて入力されたデータの全角チェックを行い、半角文字が入力されたならば、エラー音を出すスクリプトです。

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
ask "あなたの名前を入力してください。"&return&"(半角文字は入りません!)"
if it is empty then exit ???
put "あ" after it
if number of words of it<>1 then
  play "boing"
else
  put empty into last char of it
  put it into cd fld "表示"
end if

 2行目に exit ??? とありますが、?の部分にはこのスクリプトが書かれているハンドラを書いて下さい。


  • put "あ" after it
  • if number of words of it<>1 then
     it には1行目で入力されたデータが入っています。3行目ではこの it の最後に「あ」を追加します。「あ」を追加する理由は4行目において、入力されたデータが1 wordであるかどうかを調べるためです。ここでは、「あ」を追加していますが、全角文字であれば何でも構いません。
     wordというチャンクについては、理論編の「チャンクについて」を見て下さい。

     具体例を用いて説明します。
     it に「コーヒー」という文字が入っていたとします。この場合は、it は1 wordとなります。ここに「あ」を追加する訳ですが、追加後もwordによる区切りは現れないので、it は1 wordとなります。
     次にit に「コーヒー1」という文字が入っていたとします。it は2 wordで、「あ」を追加することで 3 wordとなります。
     最後に「123」という文字が入っていたとします。it は1 wordで、「あ」を追加することで 2 wordとなります。
     これでわかるように、「あ」を追加する、すなわち it が「あ」と同じ全角だけで構成されているかどうかをチェックするわけです。「あ」を「1」などの半角文字に変えれば、半角文字のみ受け付けるスクリプトとなります。


  • put empty into last char of it
  • put it into cd fld "表示"
     7行目では、追加した「あ」を取り除きます。その後8行目で、フィールド「表示」に代入してデータとして利用します。8行目は自由に変えて使って下さい。



     しかし、このチェック方法には一つ問題点があります。それは、全角のスペースをwordの区切りであるとしてしまう点です。つまり、「あ い う」などというデータを入力した場合、3 wordとなってしまうのです。
     そこで、全角スペースの問題点を解決したスクリプトを以下に紹介します。
     1 
     2 
     3 
     4 
     5 
     6 
     7 
     8 
     9 
    10 
    11 
    12 
    13 
    
    ask "あなたの名前を入力してください。"&return&"(半角文字は入りません!)"
    if it is empty then exit ???
    put "あ" after it
    put 0 into num
    repeat with i=1 to number of chars of it
      if char i of it is " " then put 1+num into num
    end repeat
    if number of words of it<>1+num then
      play "boing"
    else
      put empty into last char of it
      put it after cd fld "表示"
    end if
    

     4行目から7行目で、全角スペースの数を数えています。全角スペースの数を数え、その数を変数numに代入します。
     次に8行目でword数を調べるわけですが、全角スペースの数だけword数が増えるため、変数numの値をプラスした値でチェックをします。これにより、全角スペースによる区切りはチェックされないことになります。
     これで全角のチェックができるようになりました。半角のチェックがしたい場合は、3行目において「あ」を追加する代わりに「a」などの半角文字を追加してください。そして6行目のスペースを、半角スペースに変えておいて下さい。



     次に半角数字以外の文字をチェックするスクリプトです。
     1 
     2 
     3 
     4 
     5 
     6 
    
    ask "あなたの名前を入力してください。"&return&"(半角文字は入りません!)"
    if it is empty then exit ???
    repeat with i=1 to number of chars of it
      if char i of it is not a number then exit ???
    end repeat
    put it after cd fld "表示"
    

  • repeat with i=1 to number of chars of it
     入力されたデータのキャラクタ数だけリピートを繰り返します。


  • if char i of it is a number then exit ???
     入力されたデータの1文字目から順番に調べて、その中に数字以外のデータがあれば、ハンドラを抜けます。


     こちらのスクリプトは先のスクリプトのように、全角・半角のチェックはできません。それは数字のチェックしかしていないからです。混同しないように注意して下さい。