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

<?php
$mail = "php_programming@shuwasystem.co.jp";
if (!eregi("^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}$",$mail))
echo ("メールアドレスが誤っています!");
?>

上記の中、\\-とか\\.などの意味がわかりません。\はエスケープなら
なぜ二つ並べるのでしょうか。
そして、|の意味もわかりません。

お分かりの方、教えていただければ大変うれしいです。
よろしくお願いします。

A 回答 (2件)

その正規表現中の\\-と\\.は-と.にヒットさせるものです。


なぜ2つなのかは不明です。(-はそのままで良かったと
思うのですが)
ちなみに私は
if (!ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $mail)) {
//エラー、E-mailに全角文字や、メールアドレスとして不正な文字が入っている?
}
という正規表現を使ってます。
    • good
    • 0
この回答へのお礼

やはり、なぜ\を二つ並べる?ってあまりこだわらないことにします。
そういうふうに使うんですね。

ご紹介いただいたソースはすごくいいと思います。
参考にさせていただきますね。

この度はご指導いただき、どうもありがとうございました。

お礼日時:2002/10/12 22:48

まだ勉強中なので分かる範囲で。


|は論理和、つまり英語のorの意味ですね。
\¥はなぜ繰り返しなんでしょうね?私も疑問です。
PHPのeregiについてはちょっと分かりませんが、
分かる範囲で訳しますと、

$mailが
(1)(小文字のaからzと0から9と_または-または.の一回以上の繰り返し)
(2)@
(3)(小文字のaからzと0から9と_または-の一回以上の繰り返し)に.を付けたものの一回以上の繰り返し
(4)小文字のaからzの2回以上4回以下の繰り返し
の条件満たしているかeregiで調べて偽ならエラー表示。

ということだと思います。
でもこれだと、__--..@abc.co.jpでもエラーにならないかも・・・。
少々怪しいので、正規表現の達人による補足回答を待ちましょう。
    • good
    • 0
この回答へのお礼

|ってorの意味ですね。。。覚えてはいたと思いますが、
まったく別物に見えてしまいました。

\はそうやって二つ並べて使うって風に理解しておくしかないでしょうか。。。

この度はご指導いただきまして
どうもありがとうございます。

お礼日時:2002/10/05 16:50

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