HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
1123
まいでんinput命令のときに漢字以外をはじきたい。10解決


まいでん

リンク

2015/11/23(Mon) 15:55:05|NO.73215

input命令で作られるボックスに、漢字以外の文字を打てないようにすることはできますか?



この記事に返信する


kanamaru

リンク

2015/11/23(Mon) 16:32:16|NO.73217

ぱっと思い浮かぶ方法で、
1.ループでinput監視、漢字以外だったら取り除く。
リアルタイムでやれば、漢字を入力できないみたいに見える。
2.http://lhsp.s206.xrea.com/hsp_object2.html#1



KA

リンク

2015/11/23(Mon) 16:32:27|NO.73218

「漢字」と言うのが全角文字の事なのか、ひらがな・カタカナ・記号類
を除外した、本来の漢字の事なのか不明です。

また、漢字と言っても文字コード体系によっては若干異なります。



Rich

リンク

2015/11/23(Mon) 18:49:48|NO.73224

漢字かどうかを識別するスクリプト。(1文字のみ検出可能)
自分の中の漢字の範囲 㐂(U+3402)〜頻(U+FA6A)

//http://lhsp.s206.xrea.com/hsp_object2.htmより #define ctype HIWORD(%1) (%1 >> 16 & $FFFF) oncmd gosub *command, $111 a = "" font "MS 明朝",18 objmode 2 input a,30,30,1 hInput = objinfo(stat, 2) sysfont 0 stop *command if lparam = hInput { if HIWORD(wparam) = $300 { color 255,255,255:boxf:color 0:pos 0,30 title ""+a+" ["+strlen (a)+"] cnvstow _a,a//Unicodeに変換 //U+0x3402からU+0xFA6Aまでの間が漢字 if _a>=0x3402 & _a<=0xFA6A:mes "漢字検出\nU+"+strf("%X",_a) return } return } return



沢渡

リンク

2015/11/24(Tue) 12:44:19|NO.73235

「半角文字を入力されたらまずい」という話でしたら、
こんな感じで半角文字→全角文字の対応表を作り、入力された半角文字を
strrep命令で全角文字に置換するというのはいかがでしょうか?


! ! " ” # # $ $ % % (以下略)

標準的な日本語環境で使える半角文字は、こちらのサイトにあるもので全部だと思います。
http://idfont.jp/font-pdf/s-jis.html

それから、こちらには、IMEを自動的にONにする方法がありました。ご参考に。
http://wiki.hsp.moe/%EF%BC%A9%EF%BC%AD%EF%BC%A5%E3%81%AE%E5%88%B6%E5%BE%A1.html



まいでん

リンク

2015/11/24(Tue) 18:43:55|NO.73241

半角文字をはじくのではなくて、ひらがなやカタカナや記号などを含めた、「漢字」以外をすべてはじきたいのです。



まいでん

リンク

2015/11/24(Tue) 18:44:59|NO.73242

少し書き間違えました。「半角文字をはじくのではなくて」は、「半角文字だけをはじくのではなくて」の間違えです。



KA

リンク

2015/11/24(Tue) 19:56:23|NO.73244

かなり適当です。
今は全角全てですが範囲を絞れば漢字のみになるでしょう。


A="" input A,200,200,0 *AA C=strlen(A) B=0 repeat C D=peek(A,B) if D=0 : break if $81<=D & D<=$9F {B+=2 : continue} ;全角の範囲1 if $E0<=D & D<=$FC {B+=2 : continue} ;全角の範囲2 memcpy A,A,C-B,B,B+1 loop wait 2 objprm 0,A goto *AA stop



沢渡

リンク

2015/11/25(Wed) 10:11:47|NO.73257

このサイトを参考に作ってみました。JIS第一水準漢字と第二水準漢字が対象です。
http://charset.uic.jp/show/cp932/
http://www.seiai.ed.jp/sys/text/java/shiftjis_table.html


text="" text0="" input text id_inp=stat repeat if text!=text0 : gosub *kakou wait 20 loop *kakou //左から順に文字コードを調べる text0=text cou=0 //左から何バイト目を調べてるか repeat if cou>=strlen(text)-1 { if cou<strlen(text) : poke text,cou,'*' //チェック対象が最後の1バイトということは、ここは非漢字で確定 break } a=peek(text,cou) if ((a>=$20)&(a<=$70)) | ((a>=$A0)&(a<=$D0)) { //半角文字(1バイト)で確定 poke text,cou,'*' cou++ } else { if (a<$88) | ((a>$9F) & (a<$E0)) | (a>$EA) { //漢字以外の2バイト文字で確定 poke text,cou,'*' poke text,cou+1,'*' cou=cou+2 //2バイトなので、チェック位置を2つ右に移動 } else { cou=cou+2 //漢字で確定の場合は、チェック位置を2つ右へ } } loop strrep text,"*","" if text0!=text : objprm id_inp,text return

テキストが加工されるたびにカーソルが先頭に来てしまいますが、sendmsgを使えばどうにかなるかもしれません。



沢渡

リンク

2015/11/25(Wed) 10:59:32|NO.73260

おっと、半角文字の範囲間違えました。
ついでにTABをコピペした時等の特殊コードにも対応。

text="" text0="" input text id_inp=stat repeat if text!=text0 : gosub *kakou wait 20 loop *kakou //左から順に文字コードを調べる text0=text cou=0 //左から何バイト目を調べてるか repeat if cou>=strlen(text)-1 { if cou<strlen(text) : poke text,cou,'*' //チェック対象が最後の1バイトということは、ここは非漢字で確定 break } a=peek(text,cou) if ((a>=$00)&(a<=$7F)) | ((a>=$A0)&(a<=$DF)) { //半角文字(1バイト)で確定 poke text,cou,'*' cou++ } else { if (a<$88) | ((a>$9F) & (a<$E0)) | (a>$EA) { //漢字以外の2バイト文字で確定 poke text,cou,'*' poke text,cou+1,'*' cou=cou+2 //2バイトなので、チェック位置を2つ右に移動 } else { cou=cou+2 //漢字で確定の場合は、チェック位置を2つ右へ } } loop strrep text,"*","" if text0!=text : objprm id_inp,text return



まいでん

リンク

2015/11/25(Wed) 22:18:35|NO.73281

皆さんありがとうございます。くださったソースを参考にいろいろ試してみようと思います。



ONION software Copyright 1997-2023(c) All rights reserved.