ユーザがwinPCからフォーム入力するwebDBシステムにおいて
入力(=DB登録)を許可するのは以下の文字列のみとしたい場合
1.全角かな
2.全角漢字
3.全角カタカナ
4.半角英字
5.半角数字
6.半角の特定の記号 + - x / ( ) &
フォーム値の判定の書き方で数日なやんでおります。
スクリプトの文字コードはutf-8です。
データベースのロケール?もutf-8です。
日本語処理は
・Encodeモジュール
・Encode::Japaneseモジュール
を使います。
各パラメータの値を
全角の英/数字/記号 を 半角英数字に自動変換
半角カタカナ を 全角カタカナ に自動変換した上で
上記6.以外の記号や環境依存文字をエラー判定するには??
NG例) * % $ # " < ㈱ ③ Ⅷ など
ちなみに現行システム(EUC Jcode時代)は以下のサブルーチンを汎用的に使用していますが
機種依存文字も通ってしまう事が判明しています。
#-----------------------------#
sub kmoji_check{
#-----------------------------#
#ASCIIの範囲とJIS X 0208で定義している文字、
#X 0201(半角カナ \x8E[\xA1-\xDF])を除き、
#その他の文字・バイトが含まれるとエラーにします。
#ただし、空白文字以外の制御文字、DELETE、
#X 0212文字(旧漢字等)があってもエラーにします。
local($_) = $_[0]; $flg_err = 0; unless( /^(?: [\s\x21-\x7E]| [\xA1\xB0-\xCE\xD0-\xF3][\xA1-\xFE]| \xA2[\xA1-\xAE\xBA-\xC1\xCA-\xD0\xDC-\xEA\xF2-\xF9\xFE]| \xA3[\xB0-\xB9\xC1-\xDA\xE1-\xFA]|\xA4[\xA1-\xF3]| \xA5[\xA1-\xF6]|\xA6[\xA1-\xB8\xC1-\xD8]| \xA7[\xA1-\xC1\xD1-\xF1]|\xA8[\xA1-\xC0]| \xCF[\xA1-\xD3]|\xF4[\xA1-\xA6]| \x8E[\xA1-\xDF] )+$/x ) #↑+ なので空文字列も不可。/x があるので、正規表現の中に改行を入れられる。 {$flg_err = 1;} if(/\x27/){$flg_err = 1;} #シングルクォートはエラー
}
こんな風に入力許可できる文字コードと各パラメータの値を
パターンマッチで判定するしかないのでしょうか?

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。