メールアドレスを検証するこの機能があります:
function validateEMAIL($EMAIL) {
$v = "/[a-zA-Z0-9_-.+]+@[a-zA-Z0-9-]+.[a-zA-Z]+/";
return (bool)preg_match($v, $EMAIL);
}
メールアドレスが正しいかどうかを確認するのにこれでいいですか?
メールアドレスを検証するこの機能があります:
function validateEMAIL($EMAIL) {
$v = "/[a-zA-Z0-9_-.+]+@[a-zA-Z0-9-]+.[a-zA-Z]+/";
return (bool)preg_match($v, $EMAIL);
}
メールアドレスが正しいかどうかを確認するのにこれでいいですか?
メールアドレスが整形式かどうかを確認する最も簡単で安全な方法は、次のfilter_var()
関数を使用することです。
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
// invalid emailaddress
}
MX
さらに、ドメインがレコードを定義しているかどうかを確認できます。
if (!checkdnsrr($domain, 'MX')) {
// domain is not valid
}
しかし、これはメールが存在することを保証するものではありません。それを確認する唯一の方法は、確認メールを送信することです。
簡単な答えが得られたので、学習したい場合、または簡単な答えを使用して次に進む場合は、メールアドレスの検証について自由に読んでください. 何恨みっこない。
正規表現を使用して電子メール アドレスを検証しようとするのは「不可能」な作業です。あなたが作成した正規表現は役に立たないとまで言います。メールアドレスに関する 3 つの RFC があり、正規表現を作成して間違ったメールアドレスをキャッチし、同時に誤検知を避けることは、人間にはできないことです。PHP の関数で使用される正規表現のテスト (失敗と成功の両方) については、このリストを確認してください。filter_var()
組み込みの PHP 関数、電子メール クライアント、またはサーバーでさえ、正しく動作しません。それでも、ほとんどの場合filter_var
、これが最適なオプションです。
PHP が (現在) 電子メール アドレスを検証するために使用している正規表現パターンを知りたい場合は、PHP ソースを参照してください。
メールアドレスについて詳しく知りたい場合は、仕様を読み始めることをお勧めしますが、簡単に読めるものではないことを警告しておきます。
filter_var()
すでに述べたように、PHP 5.2 以降でのみ利用可能であることに注意してください。以前のバージョンの PHP で動作させたい場合は、PHP で使用されている正規表現を使用できます。
<?php
$pattern = '/^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD';
$emailaddress = 'test@gmail.com';
if (preg_match($pattern, $emailaddress) === 1) {
// emailaddress is valid
}
PS上記で使用された正規表現パターンに関するメモ(PHPソースから)。Michael Rushtonの著作権があるようです。「このコードは自由に使用および再配布してください。ただし、この著作権表示は保管しておいてください。」
これにはfilter_varを使用できます。
<?php
function validateEmail($email) {
return filter_var($email, FILTER_VALIDATE_EMAIL);
}
?>
PHP の組み込みフィルターを使用したほうがよいと思います。この場合は次のようになります。
FILTER_VALIDATE_EMAIL
パラメータを指定すると、true または false を返すことができます。
メール検証に関する「トップの質問」でこれに回答しましたhttps://stackoverflow.com/a/41129750/1848217
私にとって、メールをチェックする正しい方法は次のとおりです。
- 記号 @ が存在し、その前後に @ 以外の記号があることを確認します。
/^[^@]+@[^@]+$/
- 「アクティベーション コード」を記載したメールをこのアドレスに送信してみてください。
- ユーザーが自分のメールアドレスを「有効化」すると、すべてが正しいことがわかります。
もちろん、ユーザーが「奇妙な」メールを入力したときにフロントエンドに警告またはツールチップを表示して、ドメイン部分にドットがない、引用符なしで名前にスペースがあるなどのよくある間違いを避けることができます。ただし、ユーザーが本当に必要とする場合は、アドレス「hello@world」を受け入れる必要があります。
また、電子メール アドレスの標準は進化しており、進化する可能性があることを覚えておく必要があります。そのため、「標準で有効な」正規表現を一度だけ入力することはできません。また、一部の具体的なインターネット サーバーは、一般的な標準の一部の詳細に失敗し、実際には独自の「変更された標準」で動作する可能性があることを覚えておく必要があります。
したがって、@ をチェックし、フロントエンドでユーザーにヒントを与え、指定されたアドレスに確認メールを送信するだけです。