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


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

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

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

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

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

回答の条件
  • 1人2回まで
  • 登録:2009/07/14 15:45:56
  • 終了:2009/07/21 15:50:02

回答(2件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332009/07/14 17:27:32

ポイント10pt

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

入力文字は $_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) ? '合格' : '不合格';
id:sphire No.2

sphire回答回数115ベストアンサー獲得回数122009/07/15 00:59:18

ポイント10pt

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

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

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

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

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

ちなみに「半角カナ」→「全角カナ」は 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)
    '~' => '~', //半角チルダ→全角波ダッシュ(でいいのか?)
  )
);

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません