次のコードで、電子メール アドレスを .edu のみに制限するにはどうすればよいですか?
function ValidateEmail($email) {
global $debug;
if($debug)
return TRUE;
else
return preg_match("/^[^\s]+@[^\s]+.[^\s]+$/", $email);
}
次のコードで、電子メール アドレスを .edu のみに制限するにはどうすればよいですか?
function ValidateEmail($email) {
global $debug;
if($debug)
return TRUE;
else
return preg_match("/^[^\s]+@[^\s]+.[^\s]+$/", $email);
}
PHP 5.2 以降は、このコードでチェックします
function validateEmailAddress($email) {
return filter_var($email, FILTER_VALIDATE_EMAIL) && preg_match('/@.+\.edu/', $email);
}
これをチェックしてください
function ValidateEmail($email) {
if(filter_var($email, FILTER_VALIDATE_EMAIL) && ( substr($email ,-4) == ".edu")){
return true;
}else{
return false;
}
}
メールを検証するための正規表現は非常に原始的で不完全ですが、それで十分だと仮定すると、次のように [^\s]+ の代わりに ".edu" を末尾に明示的に追加するだけで済みます。
return preg_match("/^[^\s]+@[^\s]+\\.edu$/", $email);
私は正規表現の初心者です。しかし、このブロックがある期間の後に見ることができます: [^\s]+
. ニンジン (^) は not を表し、\s は空白 (タブ、改行、スペース) を表し、+ は、正規表現の次の部分 (たまたま最後) に到達するまで、これらの文字に無制限に一致することを示します。これは.
、電子メールのドメイン内で、スクリプトが無限の非空白文字に一致することを意味します。これは、example@test.com
との両方example@test.comcomcomcomcomcom
が機能するが機能example@test.c om
しないことを意味します。[^\s]+
これをに置き換えるとedu
うまくいくはずです。
function ValidateEmail($email) {
global $debug;
if($debug)
return TRUE;
else
return preg_match("/^[^\s]+@[^\s]+.edu$/", $email);
}
これが機能しない場合 (私は正規表現が非常に苦手なため)、PHP の substr() を組み込みます。
function ValidateEmail($email) {
global $debug;
if($debug)
return TRUE;
else {
if(substr($email,-4) != '.edu'))
return false;
else // ends in .edu, check for valid email
return preg_match("/^[^\s]+@[^\s]+.[^\s]+$/", $email);
}
}
preg_match("/^[^\s]+@[^\s]+.[^\s]+$/", $email);
このパターンでは、.edu をパターンの最後に配置する必要があります。
preg_match("/^[^\s]+@[^\s]+(.[^\s]+)*(\.edu)$/", $email);