dポイントプレゼントキャンペーン実施中!

フォームのメールアドレスチェックで動作がおかしいです。
自分では、問題がないと思っているのですが、どこかおかしなところがあればご指摘ただければと思います。

動作確認を簡単にするために作ったソースは

if(!ereg("^[0-9a-zA-Z\_\.\-\@]+$",'k_kkkk@kkkkk-kkkkk.com'))
{
print "NG1\n";
}else
{
print "OK1\n";
}
if(!ereg("^[0-9a-zA-Z\_\.\-\@]+$",'kkkkk@kkkkk-kkkkk.com'))
{
print "NG2\n";
}else
{
print "OK2\n";
}
if(!ereg("^[0-9a-zA-Z\_\.\-\@]+$",'k_kkkk@kkkkkkkkkk.com'))
{
print "NG3\n";
}else
{
print "OK3\n";
}
if(!ereg("^[0-9a-zA-Z\_\.\-\@]+$",'kkkkk@kkkkkkkkkk.com'))
{
print "NG4\n";
}else
{
print "OK4\n";
}
if(!ereg("[0-9a-zA-Z\_\.\-\@]+$",'k_kkkk@kkkkk-kkkkk.com'))
{
print "NG5\n";
}else
{
print "OK5\n";
}
if(!ereg("[0-9a-zA-Z\_\.\-\@]+$",'kkkkk@kkkkk-kkkkk.com'))
{
print "NG6\n";
}else
{
print "OK6\n";
}
if(!ereg("[0-9a-zA-Z\_\.\-\@]+$",'k_kkkk@kkkkkkkkkk.com'))
{
print "NG7\n";
}else
{
print "OK7\n";
}
if(!ereg("[0-9a-zA-Z\_\.\-\@]+$",'kkkkk@kkkkkkkkkk.com'))
{
print "NG8\n";
}else
{
print "OK8\n";
}

です。予想していた結果は、全てOKとなるはずだったのですが、予想に反して

NG1
NG2
OK3
OK4
OK5
OK6
OK7
OK8

となり、マッチングパターン部分が「^[0-9a-zA-Z\_\.\-\@]+$」となっているときだけ、ハイフンが文字列に含まれていると、予想と違っています。

自分的には??なのですが・・・
どこがおかしいのか、ご指摘いただければと思います。
長文ですみません。

A 回答 (2件)

試してみました。

PHP4.3.9と4.3.10では同じ症状ですね。ちなみにpreg_match関数だとちゃんと動きます。アドレスチェックだけでしたらpreg_match関数で動くと思いますし、こちらの方が動作が速いそうです。
    • good
    • 0
この回答へのお礼

レスありがとうございます。

preg_matchで行ったところ、問題なく動作しました。
ありがとうございました。

preg_matchだとデリミタも含めて、Perlでの正規表現と同じ書き方ができるので、私好みですね。
これからは、preg_matchを使うことにします。

お礼日時:2005/06/21 11:54

文字クラスの指定で\-(ハイフン)の指定がうまく認識できていないようです。



"^[-0-9a-zA-Z\_\.\@]+$"

としたらウチの環境ではうまく行きました
バグかもしれませんね。
    • good
    • 0
この回答へのお礼

レスありがとうございます。
ご指摘の通り、ハイフンを文字クラスの最初に持って行った場合、うまく動作しました。

私の方のPHPのバージョンは、レンタルサーバで4.2.4devとなっていました。

他のサーバでも色々試してみたいと思います。
ありがとうございました。

お礼日時:2005/06/21 11:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!