全角文字のみ入力可能にしたい、という要求があったので調べてみました。
はじめはゴリ押しで半角文字を全部書くのを思いついたんですが、どうもスマートじゃないと思ったわけです。
正規表現で、英文の半角空白からチルダ (~)まで( !"#$%&'()*+,-./0〜9:;<=>?@A〜Z[\]^_`a〜z{|}~ )
をマッチさせるのは、以下のように文字コードを指定して書きます。
[正規表現と使用例]
$result = ereg("[\x20-\x7E]", $string]);
うーん、こりゃ便利!
他の案件でも使おっと(笑)
--- 2007/0704 追記 -----
コメントでもご指摘のあったように、2バイト目に「¥(半角)」なんかを含む文字は結構あるようです。
で、新しく考えたのは以下の通り↓。
[ PHP ]
if (ereg("(^|[^\x81-\x9F\xE0-\xFC])[\x21-\x7f]", $_GET["name"])){
echo '半角文字を含む!';
} else {
echo '半角文字を含まない!';
}
記号がマッチした場合、その直前の文字が「文字列の先頭」か「漢字コードの1バイト目で使われるコードではない」場合、記号を含むと判断しています。
とは書いてみたものの、まだ不安だなぁ・・・文字コード関連については時間を見つけて勉強しないと。
[参考文献]
www.kent-web.com/pubc/jcode/
www.psl.ne.jp/perl/pdojo00c.html
www.psl.ne.jp/perl/pdojo00b.html
ash.jp/code/unitbl21.htm
はじめはゴリ押しで半角文字を全部書くのを思いついたんですが、どうもスマートじゃないと思ったわけです。
正規表現で、英文の半角空白からチルダ (~)まで( !"#$%&'()*+,-./0〜9:;<=>?@A〜Z[\]^_`a〜z{|}~ )
をマッチさせるのは、以下のように文字コードを指定して書きます。
[正規表現と使用例]
$result = ereg("[\x20-\x7E]", $string]);
うーん、こりゃ便利!
他の案件でも使おっと(笑)
--- 2007/0704 追記 -----
コメントでもご指摘のあったように、2バイト目に「¥(半角)」なんかを含む文字は結構あるようです。
で、新しく考えたのは以下の通り↓。
[ PHP ]
if (ereg("(^|[^\x81-\x9F\xE0-\xFC])[\x21-\x7f]", $_GET["name"])){
echo '半角文字を含む!';
} else {
echo '半角文字を含まない!';
}
記号がマッチした場合、その直前の文字が「文字列の先頭」か「漢字コードの1バイト目で使われるコードではない」場合、記号を含むと判断しています。
とは書いてみたものの、まだ不安だなぁ・・・文字コード関連については時間を見つけて勉強しないと。
[参考文献]
www.kent-web.com/pubc/jcode/
www.psl.ne.jp/perl/pdojo00c.html
www.psl.ne.jp/perl/pdojo00b.html
ash.jp/code/unitbl21.htm
PR
トラックバック
トラックバックURL:
Perlでは区別してくれなかったから、PHPでも同様だと思う。
のでご注意アレ。
こんど一覧送る。