人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

(PHP)正規表現で入力制限

PHPで正規表現を使い、入力チェックを行ないたいのですが
下記条件でチェックを行なう場合、どのように書くことができますでしょうか

■使用可能文字
・全角文字(記号も使用可)
・半角英数字(記号は使用不可)

という条件となります
また環境は下記のようになります

PHP:5.28
mbstring.internal_encoding UTF-8
mbstring.http_input SJIS-win
mbstring.http_output SJIS-win

なるべく具体的に提示していただけると助かります
解決につながる回答をいただけた方に200P差し上げます


●質問者: jayz
●カテゴリ:インターネット ウェブ制作
✍キーワード:28 PHP SJIS UTF-8 WIN
○ 状態 :キャンセル
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pahoo

こんな感じでいかがでしょう。

入力文字は $_POST['sour'] に SJIS で入ってくるものとします。

判定結果は、$_POST['sour'] に1つでも範囲外の文字があったら、$res = FALSE, $dest = '不合格' を返します。

$InternalEncoding = 'UTF-8';
mb_internal_encoding($InternalEncoding);
mb_regex_encoding($InternalEncoding);
//文字の取り出し
$sour = isset($_POST['sour']) ? $_POST['sour'] : '';
$sour = mb_convert_encoding($sour, $InternaEncoding, 'SJIS-win');
//正規表現による判定
$pat = "/[^0-9|a-z|A-Z|?-z]+/u";
$res = preg_match($pat, $sour, $arr) != 0 ? FALSE : TRUE;
$dest = ($res == TRUE) ? '合格' : '不合格';

2 ● sphire

微妙に回答ではありませんが、解決策の一つとして。

正規表現での入力チェックして、合致しなかった場合はエラーとするのでしょうか。

そうであれば、それはユーザビリティが低いやり方だと考えます。

・「半角記号」および「半角カナ」が入力されたら、全角に変換

してあげることで、問題を回避できませんか?

ちなみに「半角カナ」→「全角カナ」は mb_convert_kana()でも実現可能ですが

http://jp.php.net/mb_convert_kana

「半角記号」については、自前で列挙してあげる必要がありそうですね。

http://charset.7jp.net/sjis.html

「半角空白」を記号と見なすと仮定して、

0x20?0x2F、0x3a?0x40、0x5B?0x60、0x7B?0x7E

を全角に変換する必要があります。

これをやるなら正規表現ではなくて、strtr() とかの方が良いと思います。

http://jp.php.net/strtr


$result = strtr(
 mb_convert_kana($source, 'KV'),
 array(
 ' ' => ' ', //半角空白→全角空白
 '!' => '!', //
 :(snip)
 '~' => '?', //半角チルダ→全角波ダッシュ(でいいのか?)
 )
);

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ