SQLクエリを実行しようとしていますが、値が電子メールアドレスかどうかを何らかの方法で確認する必要があります。テーブルにこのようなユーザー値があるため、$user
が電子メールアドレスであるかどうかを確認する方法が必要です。
test
test2
[email protected]
[email protected]
test392
[email protected]
等々...
$useremail
が$user
をチェックしてメールアドレスかどうかを確認する必要があるので、値を更新できます、WHERE user=test OR [email protected]
など
$user = strtolower($olduser);
$useremail = "";
mysql_query("UPDATE _$setprofile SET user=$sn, fc=$fc WHERE user='$user' OR user='$useremail");
これは優れた方法ではなく、電子メールが存在するかどうかはチェックしませんが、@およびドメイン拡張子を持つ電子メールのように見えるかどうかをチェックします。
function checkEmail($email) {
$find1 = strpos($email, '@');
$find2 = strpos($email, '.');
return ($find1 !== false && $find2 !== false && $find2 > $find1);
}
$email = '[email protected]';
if ( checkEmail($email) ) {
echo $email . ' looks like a valid email address.';
}
正規表現なし:
<?php
if(filter_var("[email protected]", FILTER_VALIDATE_EMAIL)) {
// valid address
}
else {
// invalid address
}
?>
最も簡単な方法は、正規表現を使用してメールアドレスをチェックすることですが、これがどれほど正確であるかについては意見の相違があります。このプロセスについては、ここで詳しく説明します。
MySQLのREGEXPを使用して、正規表現に基づいてデータベースから選択できます。
if(filter_var($email, FILTER_VALIDATE_EMAIL))
{
echo 'This is a valid email address.';
echo filter_var($email, FILTER_VALIDATE_EMAIL);
//exit("E-mail is not valid");
}
else
{
echo 'Invalid email address.';
}
この関数 is_email() は、文字列が有効な電子メールアドレスであるかどうかの明確な答えを提供します。私の知る限り、同じレベルの権限でこれを行う他のソリューションはありません。
例が正しく理解できたら、次のように使用します
_$user = strtolower($olduser);
$useremail = (is_email($user)) ? $user : '';
_
PHP組み込み関数は不完全です。私はis_email()
の主な作成者なので、ここで独自のトランペットを吹いていますが、誰も二度とする必要がないようにこれに取り組む。
正規表現を使用して入力文字列を検証し、電子メールアドレスと一致するかどうかを確認できます。
<?php
$email = "[email protected]";
if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
echo "Valid email address.";
}
else {
echo "Invalid email address.";
}
?>
From: http://www.totallyphp.co.uk/code/validate_an_email_address_using_regular_expressions.htm
[〜#〜] edit [〜#〜]:より正確な表現については、この質問の Travis answer を参照してください。
私は何百ものサイトでこの機能を長年使用しています。おそらく完璧ではありませんが、偽陰性(または陽性)の苦情は一度もありません。
function validate_email($email) {
return (preg_match("/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/", $email) || !preg_match("/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/", $email)) ? false : true;
}
ほとんどの場合サポートされていないすべての正規表現の提案とは別に、利用可能なTLDのall(たとえば.info
および.museum
)およびICANNの今後の決定で、URLで中国語とアラビア語を許可します(これにより[a-z]
および\w
失敗)次のより一般的な正規表現で十分です
([^.@]+)(\.[^.@]+)*@([^.@]+\.)+([^.@]+)
また、WHERE user=test OR [email protected]
はエラーが発生しやすい。テーブルで自動生成されたPKを使用し、WHERE
句で使用することをお勧めします。
RFCxxxx仕様に準拠した、厳密で長く読めないmailregexeの価値は、実際には見当たりません。最善の方法は、アクティベーションキーを含むリンクを含むメールをエンドユーザーに送信して、メールアドレスを確認させることです。フォームでも同様に通知します。必要に応じて、パスワードの場合と同様に、ユーザーに電子メールアドレスを2回入力させます。
誰もが正規表現を投稿しているので、ここに私のものがあります:^((([\w+-]+)(.[\w+-]+)*)|(\"[^(\|\")]{0,62}\"))@(([a-zA-Z0-9-]+.)+([a-zA-Z0-9]{2,})|[?([1]?\d{1,2}|2[0-4]{1}\d{1}|25[0-5]{1})(.([1]?\d{1,2}|2[0-4]{1}\d{1}|25[0-5]{1})){3}]?)$
私の知る限り、RFC仕様のすべてをサポートしています。これには、ほとんどの人が通常は含めない多くのものが含まれます。
$user_email = "[email protected]";
function isEmail($user) {
if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
return true
} else {
return false
}
}
if (isEmail($user_email)) {
// email is valid, run the query
mysql_query("UPDATE _$setprofile SET user=$sn, fc=$fc WHERE user='$user' OR user='$user_email");
}
$user_email = "email@gmailcom";
function isEmail($email) {
if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
return true;
} else {
return false;
}
}
if (isEmail($user_email)) {
// email is ok!
} else {
// email not ok
}