CGI-BBS > 基礎 > jcode/jcode.pl > 半角文字の入力をエラーにする方法


(株)友林堂
(株)友林堂


データ復旧、即日 データ¨復旧¨テラステーション¨修理

質問者 ひまわり  投稿日 3/1(金) 20:46:41
初めて質問をさせていただきます。

フォームから入力した文字種のチェックをするコードを書いています。
以下は、氏名を入力する欄 $form{firstname_kana} の内容が
"半角文字だったらエラー"とするつもりで書いたコードです。
しかし、実際に動かしてみると、全角文字を入力してもエラーになって
しまいます。コードはIMEパッドの「シフトJIS」からもってきました。
原因がおわかりでしたらご教示いただければ幸いです。

&jcode'convert(*form,'sjis');

(途中略)

if($form{firstname_kana} =~ /[\x20-\xff]/){
        $f_error = 1;
}

回答者 しあわせのツボ  [削除]  投稿日 3/7(木) 02:33:10
SJISは2バイト目にASCIIと重複するコードがあるためです。
回避策は…EUCに変換してからチェックするとかでしょうか。
回答者 みみみ  [削除]  投稿日 3/7(木) 14:04:43
if($form{firstname_kana} =~ /[\x20-\xff]/){

の部分を

if($form{firstname_kana} =~ /[\xA6-\xDF]/){

に変えればどうでしょう。

質問者 ひまわり  [削除]  投稿日 3/7(木) 14:53:25
しあわせのツボさん、みみみさん、御回答ありがとうございました。

しあわせのつぼさん:
>SJISは2バイト目にASCIIと重複するコードがあるためです。
>回避策は…EUCに変換してからチェックするとかでしょうか。

そういうことなのですか・・・・。SJISでの文字種チェックは難しいのですね。
でも原因がわかってよかったです。ありがとうございました。

みみみさん:
>if($form{firstname_kana} =~ /[\x20-\xff]/){
>の部分を
>if($form{firstname_kana} =~ /[\xA6-\xDF]/){
>に変えればどうでしょう。

おしえていただいた通りにやったら、半角カナはエラーとすることができました。
半角数値や記号までもエラーにしたかったのですが、ちょっと欲張りすぎたでしょうか。
教えていただいたコードでやってみようと思います。
どうもありがとうございました。

このページは終了したので返信(回答)は書きこめません

データ復旧、即日 データ¨復旧¨テラステーション¨修理 Web裏技