PHPコーディング
正規表現による入力チェック(ファイル名)
2008年09月03日
PHPで文字列のチェックをするには、正規表現でチェックする方法があります。
ファイル名に日本語が含まれていないかチェックするには、
ereg("^[-0-9a-zA-Z_.]+$", $var);
とします。
以前書いた、
ereg("[a-zA-Z0-9]", $var);
は、$varの1文字めしかチェックしないので、ファイル名のように複数文字列のチェックには使えません。
そこで、ちょっと拡張です。
まず、【[]】の中身です。
a-zは小文字のアルファベットa~zまで。
同じくA-Zは大文字、0-9は数字の0~9です。
【-】、【_】、【.】も使うことができます。
ここで、【-】を先頭に持っています。a-zの【-】と区別するためのようです。
次に、
【^】は$varの最初、という意味です。
【$】は$varの最後、という意味です。
【+】は、直前の文字が少なくとも1個以上あることを示しています。
つまり、【^[-0-9a-zA-Z_.]+$】を訳すと、
【文字列の先頭から終わりまで、少なくとも1つ以上の文字を含み、その文字は、大文字小文字の半角アルファベット、数字、-、_、.のみで構成される】ということになるようです。
慣れていないため、正規表現は苦手です。
使えるようになれば、この上なく便利なのだろうと思うのですが、あまり機会がないので、慣れれない・・・
更に、PHPには【PCRE 関数】と【POSIX 正規表現関数(Perl互換)】の2種類の正規表現チェック関数があり、チェックの仕方も微妙に異なるようです。
ますますわからない・・・
ファイル名に日本語が含まれていないかチェックするには、
ereg("^[-0-9a-zA-Z_.]+$", $var);
とします。
以前書いた、
ereg("[a-zA-Z0-9]", $var);
は、$varの1文字めしかチェックしないので、ファイル名のように複数文字列のチェックには使えません。
そこで、ちょっと拡張です。
まず、【[]】の中身です。
a-zは小文字のアルファベットa~zまで。
同じくA-Zは大文字、0-9は数字の0~9です。
【-】、【_】、【.】も使うことができます。
ここで、【-】を先頭に持っています。a-zの【-】と区別するためのようです。
次に、
【^】は$varの最初、という意味です。
【$】は$varの最後、という意味です。
【+】は、直前の文字が少なくとも1個以上あることを示しています。
つまり、【^[-0-9a-zA-Z_.]+$】を訳すと、
【文字列の先頭から終わりまで、少なくとも1つ以上の文字を含み、その文字は、大文字小文字の半角アルファベット、数字、-、_、.のみで構成される】ということになるようです。
慣れていないため、正規表現は苦手です。
使えるようになれば、この上なく便利なのだろうと思うのですが、あまり機会がないので、慣れれない・・・
更に、PHPには【PCRE 関数】と【POSIX 正規表現関数(Perl互換)】の2種類の正規表現チェック関数があり、チェックの仕方も微妙に異なるようです。
ますますわからない・・・
コメント