3

私は PHP を初めて使用し (プログラミング全体ではありません)、この単純なコード行に問題があります。正しい電子メールが入力されたかどうかを確認するためだけに、入力フィールドが anysymbolornumber@anysymbolornumber として入力されているかどうかを確認したい。エラーは発生しませんが、チェック システム全体が機能しません。ここに私のコードと感謝があります!

  if ($email = "[a-zA-Z0-9]@[a-zA-Z0-9]")
{
4

6 に答える 6

9

php は初めてなので、本を購入するか、チュートリアルを1つか2つ読むことをお勧めします。

電子メールの検証には、php 5.2 以降に付属する組み込み関数である filter_var を使用する必要があります。

<?php
if(!filter_var("someone@example....com", FILTER_VALIDATE_EMAIL)){
    echo("E-mail is not valid");
}else{
   echo("E-mail is valid");
}
?> 
于 2012-07-20T08:45:23.767 に答える
4

他の関数を使用できます..正規表現の代わりに

if(filter_var($email,FILTER_VALIDATE_EMAIL)){
 echo "Valid email";
}else{
 echo "Not a valid email";
}
于 2012-07-20T08:44:44.203 に答える
2

コメントで正しく指摘されているように、使用している正規表現は、実際には電子メールを検証するためのあまり良い方法ではありません。より良い方法はたくさんありますが、正規表現がどのように機能するかを知りたいだけなら、それが出発点です。私は正規表現の専門家ではありませんが、これにより、少なくとも if ステートメントが機能します:)

if(preg_match("[a-zA-Z0-9]@[a-zA-Z0-9]",$email)
{
    // Your stuff
}
于 2012-07-20T08:42:58.993 に答える
2

メールアドレスが特定のパターンに一致することを確認しようとしているようです。しかし、適切な機能を使用していません。おそらく次のようなものが必要ですpreg_match( $pattern, $target )

また、あなたの正規表現はとにかくあなたが望むことをしていません。特に、いくつかの量指定子が必要です。そうしないと、電子メール アドレスは の前に 1 文字、@後ろに 1 文字しか使用できなくなります。また、. に最も近い 2 文字だけでなく、アドレス全体と照合できるように、シーケンスの先頭と末尾にアンカーが必要です@

このことを考慮:

if( preg_match("^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+$", $email ) ) {
    // Whatever
}

ただし、これは、電子メール アドレスを検証するための実際には貧弱なアプローチであることに注意してください。電子メール アドレスには、私が提供した文字クラスに記載されている文字よりも多くの文字を含めることができます。さらに、同じ文字クラスを使用して無効な電子メール アドレスを作成することもできます。Unicode への対応も開始されていません。正規表現を使用して電子メール アドレスを検証するのは非常に困難です。Friedl は Mastering Regular Expressions (O'Reilly) でこれを試しており、彼の努力には 2KB の正規表現パターンが必要です。せいぜい、これは基本的な健全性チェックにすぎません。これは、電子メール アドレスを確認するための安全な手段ではありません。最悪の場合、文字通り有効な正規表現を見逃し、無効な正規表現と一致します。

メールアドレスの検出と照合においてより信頼性の高いmailparse_rfc822_parse_addresses関数があります。

于 2012-07-20T08:50:19.363 に答える
0

正規表現を実行するには preg_match を使用する必要があります。

$email = を正規表現に設定しています。

次のようになります。

if ( preg_match("[a-zA-Z0-9]@[a-zA-Z0-9]", $email ))

==また、演算子を使用する必要がある場合に一致する場合にも注意してください。

次のように、代わりに filter_var を使用することをお勧めします。

if( ! filter_var( $email , FILTER_VALIDATE_EMAIL )) {
 // Failed.
}
于 2012-07-20T08:44:17.937 に答える
0

別の方法: http://www.linuxjournal.com/article/9585

function check_email_address($email) {
  // First, we check that there's one @ symbol, 
  // and that the lengths are right.
  if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email)) {
    // Email invalid because wrong number of characters 
    // in one section or wrong number of @ symbols.
    return false;
  }
  // Split it into sections to make life easier
  $email_array = explode("@", $email);
  $local_array = explode(".", $email_array[0]);
  for ($i = 0; $i < sizeof($local_array); $i++) {
    if
(!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&
↪'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$",
$local_array[$i])) {
      return false;
    }
  }
  // Check if domain is IP. If not, 
  // it should be valid domain name
  if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1])) {
    $domain_array = explode(".", $email_array[1]);
    if (sizeof($domain_array) < 2) {
        return false; // Not enough parts to domain
    }
    for ($i = 0; $i < sizeof($domain_array); $i++) {
      if
(!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|
↪([A-Za-z0-9]+))$",
$domain_array[$i])) {
        return false;
      }
    }
  }
  return true;
}
于 2012-07-20T08:44:35.997 に答える