-1

私は電子メールアドレスを検証しようとしていますが、ユーザーに検証メールを送信することでこれをバックアップするつもりであるため、可能な限り寛大な検証が必要です (これは多く聞かれることを認識していますが、他の質問はできるだけ厳密であることに焦点を当てています)可能な限り最も緩いチェックを特定しようとしています)。

メールアドレスではない可能性があるものを削除するために、ある程度の検証を行うことが重要だと今でも考えています...メール"this is not @n email. fool"のふりをしてデータベースにこっそり座ってほしくありません。私は非常に満足していますが"this.is.not.an.email@fool.com"

これまでの私の機能は次のとおりです。

function validate(email) {
  var atIndex = email.lastIndexOf('@');
  // Make sure email contains an '@' character and that it is neither the first or last character
  if (atIndex > 0 && atIndex < email.length -1) {
    // Everything before the last '@' character
    var local = email.substring(0, atIndex);
    // Everything after the last '@' character
    var domain = email.substring(atIndex + 1, email.length);
    var dotIndex = domain.lastIndexOf('.');

    // Make sure domain contains a '.' character and that it is neither the first or last character
    if (dotIndex > 0 && dotIndex < domain.length - 1) {
      // Array of strings that aren't allowed to appear in a domain
      var domainRestrictions = [
        "..",
        " "
      ];
      var i = domainRestrictions.length;
      while (i-- > -1) {
        if (domain.indexOf(domainRestrictions[i]) > -1) {
          return false;
        }
      }
      // Array of strings that the local portion can neither start or end with
      var localRestrictions = [
        ".",
        " "
      ];
      i = localRestrictions.length;
      while (i-- > -1) {
        var string = localRestrictions[i];
        if (local.indexOf(string) == 0 || local.lastIndexOf(string) == local.length - 1) {
          return false;
        }
      }

      return true;
    }

  }
  return false;
}

現在、私は以下を禁止しています。

  • 「@」記号のないもの。
  • 「.」を含まないドメイン またはそれを最初または最後の文字として含むもの。
  • 空白または「..」を含む任意のドメイン 「.」で開始または終了する任意のローカル セクション または空白

それ以外はすべて有効と見なされ、引き継がれます。

私の質問は、これが詰まる有効な電子メールアドレスはありますか? 電子メール アドレスに含めることができない、より安全な仮定はありますか?

4

3 に答える 3

1

100% 有効な電子メール アドレスを取得することを絶対に意図している場合は、まずhttps://www.rfc-editor.org/rfc/rfc2822#section-3.4.1にある RFC 2822 を読むことをお勧めします。この仕様を完全に実装すると、入力されたすべての電子メール アドレスが完全に有効な形式であることが保証されます。これは、最も複雑な正規表現以外のすべてが達成できることをはるかに超えています。たとえば、キリル文字、ギリシャ語、または Unicode 文字セットに対処する必要がある場合があります。

でも ...

この仕様の実装には、節約できる時間と比較して、かなりの時間がかかります。メールアドレスが有効な形式であっても、次のような問題があります。

  • ドメインが登録されていない可能性があります。
  • ドメインの MX レコードがない場合があります。
  • フォールバックとして、ドメインの A レコードがない場合があります。また、
  • ユーザーは実際には存在しない可能性があります。

率直に言って、電子メール アドレスが厳密に正しい形式に準拠していることを確認するのに時間を費やすよりも、それが「十分」であることを確認し、検証プロセスの他の側面に集中することに時間を費やす方がよい場合があります。

于 2013-08-12T11:03:20.840 に答える
0

- で完全なルール セットを確認してください。

http://rumkin.com/software/email/rules.php

于 2013-08-12T11:03:50.510 に答える
0

正規表現を使用すると、問題が大幅に軽減されます。メールアドレスを検証するメール検証パターンがあります。

Pattern pattern = Pattern.compile("([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4})?");
Matcher matcher = pattern.matcher(yourEmailAddress);
if(matcher.matches()){
  //do something
}else {
  //tell the user it didn't match
}
于 2013-08-12T11:02:22.317 に答える