5217

正規表現を使用して JavaScript で電子メール アドレスを検証する最良の方法は何ですか?

4

101 に答える 101

6086

正規表現を使用するのがおそらく最良の方法です。ここで一連のテストを見ることができます(chromiumから取得)

const validateEmail = (email) => {
  return String(email)
    .toLowerCase()
    .match(
      /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
    );
};

Unicode を受け入れる正規表現の例を次に示します。

const re =
  /^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;

ただし、JavaScript の検証だけに頼るべきではないことに注意してください。JavaScript は簡単に無効にすることができます。これは、サーバー側でも検証する必要があります。

上記の動作例を次に示します。

const validateEmail = (email) => {
  return email.match(
    /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  );
};

const validate = () => {
  const $result = $('#result');
  const email = $('#email').val();
  $result.text('');

  if (validateEmail(email)) {
    $result.text(email + ' is valid :)');
    $result.css('color', 'green');
  } else {
    $result.text(email + ' is not valid :(');
    $result.css('color', 'red');
  }
  return false;
}

$('#email').on('input', validate);

そして、これは次のhtmlとおりです。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<label for="email">Enter an email address: </label>
<input id="email" />
<h2 id="result"></h2>
于 2008-09-05T16:15:34.747 に答える
1138

次の形式で非常に単純な検証が必要な人のために、ジェイモンの回答を少し変更しました。

anystring@anystring.anystring

正規表現:

/\S+@\S+\.\S+/

複数の @ 記号が一致しないようにするには:

/^[^\s@]+@[^\s@]+\.[^\s@]+$/

JavaScript 関数の例:

function validateEmail(email) 
    {
        var re = /\S+@\S+\.\S+/;
        return re.test(email);
    }
    
console.log(validateEmail('anystring@anystring.anystring'));

于 2012-02-09T02:22:32.837 に答える
862

完全を期すために、ここに別のRFC2822準拠の正規表現があります

公式の標準はRFC2822として知られています。有効な電子メールアドレスが準拠する必要のある構文について説明します。次の正規表現を使用して実装できます(ただし、実行しないでください読み進めてください)。

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

(...)二重引用符と角かっこを使用して構文を省略すると、RFC2822のより実用的な実装が得られます。それでも、今日実際に使用されているすべての電子メールアドレスの99.99%に一致します。

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

さらに、2文字の国別コードのトップレベルドメインと、特定のジェネリックトップレベルドメインのみを許可するように変更することもできます。この正規表現は、のようなダミーの電子メールアドレスをフィルタリングしますasdf@adsf.adsf新しいトップレベルドメインが追加されたら、更新する必要があります。

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b

したがって、公式の基準に従っている場合でも、トレードオフが必要です。オンラインライブラリやディスカッションフォーラムから正規表現を盲目的にコピーしないでください。常に自分のデータと自分のアプリケーションでテストしてください。

強調鉱山

于 2009-09-03T14:26:09.383 に答える
465

うわー、ここには多くの複雑さがあります。最も明白な構文エラーをキャッチするだけなら、次のようにします。

^\S+@\S+$

通常、ユーザーが犯した最も明白なエラーをキャッチし、フォームがほぼ正しいことを保証します。これが JavaScript 検証のすべてです。

編集:「.」も確認できます。を使用したメールで

/^\S+@\S+\.\S+$/
于 2008-09-07T21:21:46.567 に答える
356

正規表現を使用して電子メールを検証することを決定した瞬間に理解しなければならないことがあります。それはおそらく良い考えではありません。あなたがそれに同意すると、そこにあなたを途中で連れて行くことができる多くの実装がそこにあります、この記事はそれらをうまく要約します。

ただし、要するに、ユーザーが入力したものが実際に電子メールであることを絶対的に確実に確認する唯一の方法は、実際に電子メールを送信して何が起こるかを確認することです。それ以外はすべて推測です。

于 2009-05-02T17:18:29.030 に答える
268

HTML5 自体に電子メール検証があります。ブラウザーが HTML5 をサポートしている場合は、次のコードを使用できます。

<form>
  <input type="email" placeholder="me@example.com" required>
  <input type="submit">
</form>

jsFiddleリンク

HTML5仕様から:

有効な電子メール アドレスemailは、文字セットが Unicode である次の ABNFの生成に一致する文字列です。

email   = 1*( atext / "." ) "@" label *( "." label )
label   = let-dig [ [ ldh-str ] let-dig ]  ; limited to a length of 63 characters by RFC 1034 section 3.5
atext   = < as defined in RFC 5322 section 3.2.3 >
let-dig = < as defined in RFC 1034 section 3.5 >
ldh-str = < as defined in RFC 1034 section 3.5 >

この要件は、 RFC 5322 の意図的な違反です。RFC 5322 は、厳密すぎる ("@" 文字の前)、あまりにもあいまいな ("@" 文字の後)、およびあまりにも緩い (コメントを許可する) 電子メール アドレスの構文を同時に定義しています。 、空白文字、およびほとんどのユーザーにはなじみのない方法で引用符で囲まれた文字列) を使用すると、ここで実際に使用できます。

次の JavaScript および Perl 互換の正規表現は、上記の定義の実装です。

/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
于 2011-10-17T08:23:34.947 に答える
179

これが最良の解決策であることがわかりました:

/^[^\s@]+@[^\s@]+\.[^\s@]+$/

次の形式を使用できます。

1. prettyandsimple@example.com
2.very.common@example.com
3.disposable.style.email.with+symbol@example.com
4. other.email-with-dash@example.com
9. #!$%&'*+-/=?^_`{}|~@example.org
6. "()[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~.a"@example.org
7. " "@example.org (引用符の間のスペース)
8. üñîçøðé​​@example.com (ローカル部分の Unicode 文字)
9. üñîçøðé​​@üñîçøðé​​.com (ドメイン部分の Unicode 文字)
10. Pelé@example.com (ラテン語)
11. δοκιμή@παράδειγμα.δοκιμή (ギリシャ語)
12. 我買@屋企.香港 (中国語)
13. 甲斐@黒川.日本 (日本語)
14. чебурашка@ящик-с-апельсинами.рф (キリル文字)

これは明らかに汎用性があり、基本的な any@anything.anything 形式を適用しながら、重要な国際文字を使用できます。RFC で技術的に許可されているスペースをブロックしますが、非常にまれであるため、喜んでブロックします。

于 2015-09-21T01:52:30.870 に答える
118

最新のブラウザーでは、純粋な JavaScript とDOMを使用して @Sushil の回答の上に構築できます。

function validateEmail(value) {
  var input = document.createElement('input');

  input.type = 'email';
  input.required = true;
  input.value = value;

  return typeof input.checkValidity === 'function' ? input.checkValidity() : /\S+@\S+\.\S+/.test(value);
}

フィドルhttp://jsfiddle.net/boldewyn/2b6d5/に例をまとめました。機能の検出とSquirtle's Answerからの必要最小限の検証と組み合わせることで、正規表現の大量虐殺から解放され、古いブラウザーで動作しなくなります。

于 2012-12-20T15:20:53.650 に答える
81

JavaScript は正規表現に一致できます。

emailAddress.match( / some_regex /);

メールのRFC22正規表現は次のとおりです。

^((?>[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+\x20*|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*
"\x20*)*(?<angle><))?((?!\.)(?>\.?[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+)+|"((?=[\x01-\x
7f])[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]{2,}|\[(((?(?<
!\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d)){4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f])
[^\\\[\]]|\\[\x01-\x7f])+)\])(?(angle)>)$
于 2008-09-05T16:13:15.063 に答える
78

これは正しい RFC822 バージョンです。

function checkEmail(emailAddress) {
  var sQtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]';
  var sDtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]';
  var sAtom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+';
  var sQuotedPair = '\\x5c[\\x00-\\x7f]';
  var sDomainLiteral = '\\x5b(' + sDtext + '|' + sQuotedPair + ')*\\x5d';
  var sQuotedString = '\\x22(' + sQtext + '|' + sQuotedPair + ')*\\x22';
  var sDomain_ref = sAtom;
  var sSubDomain = '(' + sDomain_ref + '|' + sDomainLiteral + ')';
  var sWord = '(' + sAtom + '|' + sQuotedString + ')';
  var sDomain = sSubDomain + '(\\x2e' + sSubDomain + ')*';
  var sLocalPart = sWord + '(\\x2e' + sWord + ')*';
  var sAddrSpec = sLocalPart + '\\x40' + sDomain; // complete RFC822 email address spec
  var sValidEmail = '^' + sAddrSpec + '$'; // as whole string

  var reValidEmail = new RegExp(sValidEmail);

  return reValidEmail.test(emailAddress);
}
于 2013-04-15T13:31:28.660 に答える
70

これはhttp://codesnippets.joyent.com/posts/show/1917から盗まれたものです

email = $('email');
filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
if (filter.test(email.value)) {
  // Yay! valid
  return true;
}
else
  {return false;}
于 2009-05-02T17:19:46.360 に答える
63

これを行う:

^([a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?)$

RFC 2822に基づいています。

https://regex101.com/r/857lzc/1でテストしてください

多くの場合、メール アドレスをデータベースに格納するときは小文字にします。実際には、通常、正規表現は大文字と小文字を区別しないようにマークできます。そのような場合、これは少し短くなります:

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

JavaScript で使用されている例を次に示します (最後に大文字と小文字を区別しないフラグiを付けます)。

var emailCheck=/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;
console.log( emailCheck.test('some.body@domain.co.uk') );

:
技術的には、一部の電子メールでは、引用符内にエスケープ文字を含む記号の前のセクションに引用符を含める@ことができます (そのため、電子メール ユーザーは、引用符で囲まれている限り、不快感を覚えたり、 や のようなものを含んだりする可能性があります) @"..."誰もこれをしません!時代遅れです。ただし、これは真のRFC 2822標準に含まれており、ここでは省略されています。

注 2 : メールの先頭 (@ 記号の前) では、大文字と小文字が区別される場合があります (仕様による) ただし、大文字と小文字を区別する電子メールを使用する人はおそらく問題に慣れているため、実際には、大文字と小文字を区別しないことが安全な想定です。詳細:メール アドレスは大文字と小文字を区別しますか?

詳細: http://www.regular-expressions.info/email.html

于 2012-11-01T14:06:27.477 に答える
47

この問題を解決することを本当に楽しみにしています。だから私は上記の電子メール検証正規表現を変更しました

  • オリジナル
    /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

  • 修正済み
    /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()\.,;\s@\"]+\.{0,1})+[^<>()\.,;:\s@\"]{2,})$/

Wikipedia Email Addressの例を渡します。

そして、ここで結果を見ることができます。

ここに画像の説明を入力

于 2016-07-01T04:43:18.483 に答える
27

正規表現を使用して入力文字列を検証し、それが電子メールかどうかを確認しないでください。これは複雑すぎて、すべてのケースをカバーすることはできません。

ケースの 90% しかカバーできないので、次のように記述します。

function isPossiblyValidEmail(txt) {
   return txt.length > 5 && txt.indexOf('@')>0;
}

あなたはそれを洗練することができます。たとえば、「aaa@」は有効です。しかし、全体として要点はわかります。そして、夢中にならないでください...単純な 90% のソリューションは、機能しない 100% のソリューションよりも優れています。

世界はよりシンプルなコードを必要としています...

于 2011-12-19T18:39:02.510 に答える
22

100% 正しい電子メール バリデータを取得することは困難です。それを正しくする唯一の実際の方法は、アカウントにテスト メールを送信することです。とはいえ、妥当なものを取得していることを確認するのに役立ついくつかの基本的なチェックがあります。

改善すべき点:

new の代わりに、次のように out をRegExp書いてみてくださいregexp:

if (reg.test(/@/))

次に、記号の後にピリオドがあることを確認し、 s とピリオドの@間に文字があることを確認します。@

于 2009-05-02T17:23:03.153 に答える
18

これは、node-validatorが行う方法です。

/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!\.)){0,61}[a-zA-Z0-9]?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/
于 2013-09-11T02:21:40.317 に答える
15

ウィキペディアの標準メール構文:

https://en.wikipedia.org/wiki/Email_address#Examples https://fr.wikipedia.org/wiki/Adresse_%C3%A9lectronique#Syntaxe_exacte

関数 :

function validMail(mail)
{
    return /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()\.,;\s@\"]+\.{0,1})+([^<>()\.,;:\s@\"]{2,}|[\d\.]+))$/.test(mail);
}

有効なメール:

validMail('Abc@example.com') // Return true
validMail('Abc@example.com.') // Return true
validMail('Abc@10.42.0.1') // Return true
validMail('user@localserver') // Return true
validMail('Abc.123@example.com') // Return true
validMail('user+mailbox/department=shipping@example.com') // Return true
validMail('"very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com') // Return true
validMail('!#$%&\'*+-/=?^_`.{|}~@example.com') // Return true
validMail('"()<>[]:,;@\\\"!#$%&\'-/=?^_`{}| ~.a"@example.org') // Return true
validMail('"Abc@def"@example.com') // Return true
validMail('"Fred Bloggs"@example.com') // Return true
validMail('"Joe.\\Blow"@example.com') // Return true
validMail('Loïc.Accentué@voilà.fr') // Return true
validMail('" "@example.org') // Return true
validMail('user@[IPv6:2001:DB8::1]') // Return true

無効なメール:

validMail('Abc.example.com') // Return false
validMail('A@b@c@example.com') // Return false
validMail('a"b(c)d,e:f;g<h>i[j\k]l@example.com') // Return false
validMail('just"not"right@example.com') // Return false
validMail('this is"not\allowed@example.com') // Return false
validMail('this\ still\"not\\allowed@example.com') // Return false
validMail('john..doe@example.com') // Return false
validMail('john.doe@example..com') // Return false

このテストを表示してください: https://regex101.com/r/LHJ9gU/1

于 2017-06-21T09:10:18.750 に答える
14

バリデータ関数内で次のコードを使用します。

var emailID = document.forms["formName"]["form element id"].value;
atpos = emailID.indexOf("@");
dotpos = emailID.lastIndexOf(".");
if (atpos < 1 || ( dotpos - atpos < 2 ))
{
    alert("Please enter correct email ID")
    return false;
}

それ以外の場合はjQueryを使用できます。内部規則は次のように定義します。

eMailId: {
    required: true,
    email: true
}
于 2013-11-29T12:26:14.213 に答える
13

ゼニガメとは対照的に、これは複雑な解決策ですが、電子メールを適切に検証するという非常に優れた仕事をします。

function isEmail(email) { 
    return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(email);
} 

そのように使用します:

if (isEmail('youremail@yourdomain.com')){ console.log('This is email is valid'); }
于 2012-06-05T23:41:59.357 に答える
13

正規表現に関する私の知識はあまりよくありません。そのため、最初に単純な正規表現で一般的な構文をチェックし、その後で他の関数でより具体的なオプションをチェックします。これは最善の技術的解決策ではないかもしれませんが、この方法により、より柔軟で高速になります。

私が遭遇した最も一般的なエラーは、スペース (特に最初と最後) と、場合によっては 2 つのドットです。

function check_email(val){
    if(!val.match(/\S+@\S+\.\S+/)){ // Jaymon's / Squirtle's solution
        // Do something
        return false;
    }
    if( val.indexOf(' ')!=-1 || val.indexOf('..')!=-1){
        // Do something
        return false;
    }
    return true;
}

check_email('check@thiscom'); // Returns false
check_email('check@this..com'); // Returns false
check_email(' check@this.com'); // Returns false
check_email('check@this.com'); // Returns true
于 2013-04-15T11:53:20.503 に答える
13

var testresults

function checkemail() {
  var str = document.validation.emailcheck.value
  var filter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
  if (filter.test(str))
    testresults = true
  else {
    alert("Please input a valid email address!")
    testresults = false
  }
  return (testresults)
}

function checkbae() {
  if (document.layers || document.getElementById || document.all)
    return checkemail()
  else
    return true
}
<form name="validation" onSubmit="return checkbae()">
  Please input a valid email address:<br />

  <input type="text" size=18 name="emailcheck">
  <input type="submit" value="Submit">
</form>

于 2013-01-31T09:39:59.967 に答える
12

どうやら、それだけです:

/^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i

10 年 10 月 1 日にhttp://fightingforalostcause.net/misc/2006/compare-email-regex.phpから取得。

しかしもちろん、それは国際化を無視しています。

于 2010-10-01T09:37:31.117 に答える
12

これは、正規表現を使用して電子メール アドレスを検証することに関する非常に優れた議論です。「正規表現を検証する電子メール アドレスの比較

参考までに、JavaScript と互換性のある現在の上位の式を次に示します。

/^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i
于 2010-05-28T22:05:45.357 に答える
10

すべての電子メール アドレス テスト ケースに合格する JS の正規表現を探していました。

  • email@example.com有効なメール

  • firstname.lastname@example.com メールのアドレス フィールドにドットが含まれている

  • email@subdomain.example.com電子メールにはサブドメインのドットが含まれています

  • firstname+lastname@example.com プラス記号は有効な文字と見なされます

  • email@192.0.2.123ドメインは有効な IP アドレスです

  • email@[192.0.2.123]IP アドレスを囲む角括弧は有効と見なされます

  • “email”@example.comメールに関する引用は有効と見なされます

  • 1234567890@example.com住所の数字は有効です

  • email@domain-one.exampleドメイン名のダッシュは有効です

  • _______@example.comアドレス フィールドのアンダースコアは有効です

  • email@example.name .name有効なトップ レベル ドメイン名です

  • email@example.co.jpトップ レベル ドメイン名のドットも有効と見なされます (co.jpここでは例として使用)

  • firstname-lastname@example.comアドレス フィールドのダッシュは有効です

どうぞ :

http://regexr.com/3f07j

または正規表現:

Regex = /(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@[*[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+]*/
于 2017-01-03T05:38:43.997 に答える
7

Microsoft がASP.NET MVC内で提供する正規表現は、次のとおりです。

/^[\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$/

欠陥がある場合に備えてここに投稿しますが、常に私のニーズには完璧でした.

于 2013-12-04T10:44:31.880 に答える
7

~私の場合、私は避けたかったので、別の解決策#を使用しました:

function validEmail(email){
  const regex = /^((?!\.)[\w\-_.]*[^.])(@\w+)(\.\w+(\.\w+)?[^.\W])$/;
  return regex.test(email);
}

function validEmail(email){
  const regex = /^((?!\.)[\w\-_.]*[^.])(@\w+)(\.\w+(\.\w+)?[^.\W])$/;
  return regex.test(email);
}

const emails = [
'pio_pio@factory.com',
'~pio_pio@factory.com',
'pio_~pio@factory.com',
'pio_#pio@factory.com',
'pio_pio@#factory.com',
'pio_pio@factory.c#om',
'pio_pio@factory.c*om',
'pio^_pio@factory.com'
]

for(const email of emails){
  document.write(email+' : '+validEmail(email)+'</br>');
}

于 2019-12-27T08:52:53.777 に答える
6

@mevius と @Boldewyn Code を組み合わせて、JavaScript を使用した電子メール検証用のこの究極のコードを作成しました。

function ValidateEmail(email){
 
  var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
 
  var input = document.createElement('input');
 
  input.type = 'email';
  input.value = email;
 
  return typeof input.checkValidity == 'function' ? input.checkValidity() : re.test(email);
 
}

このコードは、こちらのブログで共有しています。

于 2016-06-27T23:36:35.057 に答える
6

セクトリアンのソリューションはうまく機能しますが、私のリンターに失敗していました。だから私はいくつかのエスケープを追加しました:

function validateEmail(email){ 
     var re = /^(([^<>()[]\\.,;:\s@\"]+(\.[^<>()[]\\.,;:\s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}\‌​.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 
     return re.test(email); 
}
于 2012-08-30T15:00:43.250 に答える
6

シンプルに保ち、ユーザーを満足させたいと思っています。また、わかりやすいコードを好みます。正規表現はそうではありません。

function isValidEmail(value) {
    const atLocation = value.lastIndexOf("@");
    const dotLocation = value.lastIndexOf("."); 
    return (
        atLocation > 0 &&
        dotLocation > atLocation + 1 &&
        dotLocation < value.length - 1
    );
};
  • 最後の「@」と最後の「.」の位置を取得します。
  • 「@」が最初の文字でないことを確認してください(その前に何かがあります)
  • 「。」を確認してください。「@」の後にあり、それらの間に少なくとも1つの文字があること
  • 「。」の後に少なくとも 1 つの文字があることを確認してください。

これにより、無効な電子メール アドレスの通過が許可されますか? 確かに、ボタンの有効化/無効化、エラー メッセージの表示などを可能にする優れたユーザー エクスペリエンスのために、これ以上のことは必要ないと思います。そのアドレスへのメール。

于 2020-02-03T15:38:01.223 に答える
5

これは、フロントエンドの電子メール検証に使用する関数です。(正規表現は parsley.js から来ました)

<!DOCTYPE html>
<html>
<head>
    <title>Our Company</title>
    <style>
        .form-style {
            color: #ccc;
        }
    </style>
</head>
<body>
    <h1>Email Validation Form Example</h1>
    <input type="text" name="email" id="emailInput" class="form-style">
    <script>
        function validateEmail(emailAddress) {
            var regularExpression = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))){2,6}$/i;
             return regularExpression.test(emailAddress);
        }

        function showEmailValidationState(event) {
            if (validateEmail(event.target.value)) {
                document.getElementById("emailInput").style.color = 'black';
            }
        }
    document.getElementById("emailInput").addEventListener("keyup", showEmailValidationState);
    </script>
</body>
</html>
于 2014-08-04T18:33:58.627 に答える
5

ベスト プラクティスは、HTML5 組み込みの電子メール タグを使用することです。

<input type="email" name="email">

または、@ と . 文字列から以下に示します。

^[a-zA-Z0-9_\-.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-.]+$

これでも正規表現に一致する無効な電子メールが生成されることに注意してください。すべてをキャッチすることはほとんど不可能ですが、これにより状況が少し改善されます。

于 2015-09-06T06:31:56.710 に答える
4

次の正規表現を使用します。

 /^[a-z][a-zA-Z0-9_.]*(\.[a-zA-Z][a-zA-Z0-9_.]*)?@[a-z][a-zA-Z-0-9]*\.[a-z]+(\.[a-z]+)?$/

例:

function validateEmail(email) {
    var re = /^[a-z][a-zA-Z0-9_.]*(\.[a-zA-Z][a-zA-Z0-9_.]*)?@[a-z][a-zA-Z-0-9]*\.[a-z]+(\.[a-z]+)?$/;
    return re.test(email);
}

@ , のみを許可する必要があります。、_

于 2016-05-31T08:30:22.787 に答える
4

次の正規表現の検証:

  • @ の前にスペース文字はありません
  • @ の後に (-) と (.) を一緒に使用しないでください @ の後に特殊文字は使用できません @ の前に 2 文字必要です 電子メールの長さは 128 文字未満にする必要があります
function validateEmail(email) {
var chrbeforAt = email.substr(0, email.indexOf('@'));
if (!($.trim(email).length > 127)) {
    if (chrbeforAt.length >= 2) {
        var re = /^(([^<>()[\]{}'^?\\.,!|//#%*-+=&;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;
        //var re = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;
        return re.test(email);
    } else {
        return false;
    }
} else {
    return false;
}
}
于 2015-03-02T07:19:21.370 に答える
3

Closure を使用している場合は、組み込みgoog.format.EmailAddress型を使用できます。

http://docs.closure-library.googlecode.com/git/class_goog_format_EmailAddress.html

例えば:

goog.format.EmailAddress.isValidAddrSpec("blah@blah.com")

ソース (上記のリンク) を読むと、IDN はサポートされておらず、ほとんどのアドレスをカバーすることのみを目的としているというコメントが示されていることがわかります。

// This is a fairly naive implementation, but it covers 99% of use cases.
// For more details, see http://en.wikipedia.org/wiki/Email_address#Syntax
// TODO(mariakhomenko): we should also be handling i18n domain names as per
// http://en.wikipedia.org/wiki/Internationalized_domain_name
于 2013-09-10T12:37:10.873 に答える
2

JavaScript で正規表現を使用してメールのパターンに対して任意の文字列をテストする関数を作成するのはどうですか。英国やオーストラリアのように、地域によってメールアドレスが大きく異なる可能性があることがわかっているため、通常は.co.ukor.com.auで終わるため、カバーしようとしましたそれらも同様に、次のような関数に渡された文字列かどうかも確認します。

var isEmail = function(str) {
  return typeof str==='string' && /^[\w+\d+._]+\@[\w+\d+_+]+\.[\w+\d+._]{2,8}$/.test(str);
}

以下のようなメールかどうかを確認します。

isEmail('alex@example.com'); //true
isEmail('alireza@test.co.uk'); //true
isEmail('peter.example@yahoo.com.au'); //true
isEmail('alex@example.com'); //true
isEmail('peter_123@news.com'); //true
isEmail('hello7___@ca.com.pt'); //true
isEmail('example@example.co'); //true
isEmail('hallo@example.coassjj#sswzazaaaa'); //false
isEmail('hallo2ww22@example....caaaao'); //false
于 2017-06-17T06:55:44.140 に答える
2

次の正規表現の検証:

  • @ の前にスペース文字はありません
  • @ の後に (-) と (.) を一緒にしないでください
  • @ の前に @ 2 文字の後に特殊文字は使用できません
  • メールの長さは 128 文字未満にする必要があります

    function validateEmail(email) {
        var chrbeforAt = email.substr(0, email.indexOf('@'));
        if (!($.trim(email).length > 127)) {
            if (chrbeforAt.length >= 2) {
                var re = /^(([^<>()[\]{}'^?\\.,!|//#%*-+=&;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;
                return re.test(email);
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
    
于 2015-03-02T07:21:02.640 に答える
2

正規表現を追加します-他の言語の文字や大文字などの小さな問題を解決しました

^[a-zA-Z0-9][a-zA-Z0-9-_\.]+@([a-zA-Z]|[a-zA-Z0-9]?[a-zA-Z0-9-]+[a-zA-Z0-9])\.[a-zA-Z0-9]{2,10}(?:\.[a-zA-Z]{2,10})?$
于 2019-08-05T16:23:31.063 に答える
1

Jquery を使用し、最新のアプローチが必要な場合は、JQuery 入力マスクを検証と共に使用します。

http://bseth99.github.io/projects/jquery-ui/5-jquery-masks.html

jquery 入力マスクの単純さに関するデモ: http://codepen.io/anon/pen/gpRyBp

日付の単純な入力マスクの例 forexample 完全な検証ではない

 <input id="date" type="text" placeholder="YYYY-MM-DD"/>

そしてスクリプト:

 $("#date").mask("9999-99-99",{placeholder:"YYYY-MM-DD"});
于 2015-08-25T14:24:45.330 に答える
1

この正規表現は、abc@abc.com.com.com.com のようなドメイン名の重複を防ぎ、abc@abc.co.in のようなドメイン 2 回のみを許可します。また、123abc@abc.com のような番号からの開始も許可されていません。

regexp: /^([a-zA-Z])+([a-zA-Z0-9_.+-])+\@(([a-zA-Z])+\.+?(com|co|in|org|net|edu|info|gov|vekomy))\.?(com|co|in|org|net|edu|info|gov)?$/,  

ではごきげんよう !!!!!

于 2015-11-03T07:46:49.387 に答える
1

私はそれが正規表現ではないことを知っていますが、とにかく...

これは node と npm パッケージの email-existence の例です。これは、メールが存在するかどうか、およびそのフォームが正しいかどうかを最終的にチェックするものです:)

これは、応答がない場合に応答する場合に電子メールを ping し、false または true を返します。

function doesEmailExist(email) {
    var emailExistence = require('email-existence');
    return emailExistence.check(email,function (err,status) {
            if (status) {
                return status;
            }
            else {
                throw new Error('Email does not exist');
            }
        });
}
于 2015-02-18T08:33:51.163 に答える
1

これは、単純な電子メールの正規表現ではうまく機能します。

AnythingExceptAtOrSpace@anythingExceptAtOrSpace.anythingExceptAtOrSpace

/^[^@ ]+@[^@ ]+\.[^@ ]+$/

テストする:

const emailRegex = /^[^@ ]+@[^@ ]+\.[^@ ]+$/
const result1 = emailRegex.test('hello@there.com')
console.log(result1) // true
const result2 = emailRegex.test('hel@lo@there.com')
console.log(result2) // false

于 2021-04-18T01:01:20.513 に答える
1

これは機能し、フォームに検証/通知機能を含むソリューションです:

このリンクで実行できます

ジャバスクリプト

(function() {
  'use strict';

  window.addEventListener('load', function() {
    var form = document.getElementById('needs-validation');
    form.addEventListener('submit', function(event) {
      if (form.checkValidity() === false) {
        event.preventDefault();
      }
      form.classList.add('was-validated');
      event.preventDefault();              
    }, false);
  }, false);
})();

HTML

<p class='title'>
    <b>Email validation</b>
  <hr size="30px;">
</p>
<br>

<form id="needs-validation" novalidate>
  <p class='form_text'>Try it out!</p>
  <div class="form-row">
    <div class="col-12">
      <input type="email" class="form-control" placeholder="Email Address" required>
        <div class="invalid-feedback">
          Please enter a valid email address.
        </div>
    </div>
  <div class="row">
    <div class="col-12">
      <button type="submit" 
          class="btn btn-default btn-block">Sign up now
      </button>
    </div>
   </div>
</form>
于 2018-07-18T10:15:54.970 に答える
1

これが私のやり方です。標準の電子メール パターンをチェックするために match() を使用しており、それに応じてユーザーに通知するために入力テキストにクラスを追加しています。それが役立つことを願っています!

$(document).ready(function(){
  $('#submit').on('click', function(){
      var email = $('#email').val();
      var pat = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
      if (email.match(pat)){
        $('#email')
          .addClass('input-valid');
        return false;
      } else {
        $('#email')
        	.addClass('input-error')
          .val('');
        return false;
      }
  });
});
.input-error {
  border: 1px solid red;
  color: red;
}

.input-valid {
  border: 1px solid green;
  color: green;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
    <input type="text" id="email" placeholder="name@service.xx" class="">
    <input type="submit" id="submit" value="Send"/>
</form>

于 2019-02-23T20:19:12.123 に答える
1

PHP のfilter_var($value, FILTER_VALIDATE_EMAIL)実装と完全に互換性のある JavaScript 電子メール バリデータを作成しました。

https://github.com/mpyw/FILTER_VALIDATE_EMAIL.js

import validateEmail from 'filter-validate-email'

const value = '...'
const result = validateEmail(value)

次と同等です。

<?php

$value = '...';
$result = (bool)filter_var($value, FILTER_VALIDATE_EMAIL, FILTER_FLAG_EMAIL_UNICODE);
于 2018-07-22T10:53:07.337 に答える
0

私の同僚の 1 人がこの正規表現を私と共有しました。それは大好きです。

function isValidEmailAddress (email) {
    var validEmail = false;
    if (email) {
        email = email.trim().toLowerCase();
        var pattern = /^[\w-']+(\.[\w-']+)*@([a-zA-Z0-9]+[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*?\.[a-zA-Z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$/;
        validEmail = pattern.exec(email);
    }

    return validEmail;
}

if (typeof String.prototype.trim !== 'function') {
    String.prototype.trim = function() {
        return this.replace(/^\s+|\s+$/g, '');
    };
}
于 2014-07-11T18:36:33.330 に答える
-3

でとてもシンプルJavaScript。このコードに従ってください。

function validate(){
    var email = document.getElementById('Email');
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

    if (!filter.test(email.value))
    {
        alert('Please Enter the valid email address');
        email.focus;
        return false;
    }
    else
{
        return true;
    }

HTMLこのためのコード:

form name="form"
     enctype="multipart/form-data"
     name="form"
     action="register.php"
     method="POST" onsubmit="return validate();" >
    <input type="text" placeholder="Enter ur Email Id" id="Email" name="Email" />
    <input type="submit" id="submit" value="save" name="Like" class="button" />
</form>
于 2014-02-26T10:49:21.830 に答える
-6

電子メールの検証正規表現:

var rex_email = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

if(email=="") {
    window.plugins.toast.showShortBottom( "Please enter the details. ", function(a) {
        console.log('toast success: ' + a);
    }, function(b) { });
} else if(!rex_email.test(email)) {
    window.plugins.toast.showShortBottom( "Please enter the valid email id. ", function(a) {
        console.log('toast success: ' + a);
    }, function(b) { });
}
于 2015-01-21T00:20:54.117 に答える
-6

W3Schoolsは、電子メールを検証するための優れたシンプルで効率的なスクリプトを提供します。

function validateEmail(email) {
    var atpos=email.indexOf("@");
    var dotpos=email.lastIndexOf(".");
    if (atpos < 1 || dotpos < atpos+2 || dotpos+2 >= email.length) {
        alert("Not a valid e-mail address");
        return false;
    }
    return true;
}

ただし、スペースがある場合は、次のように削除する必要があることに注意してください。

.replace(/ /g,'')

ソース: JavaScript フォーム検証

于 2013-10-31T23:23:46.313 に答える
-7
function validateEmail(elementValue){        
    var emailPattern = /^[a-zA-Z0-9._]+[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,4}$/;  
    return emailPattern.test(elementValue);   
  }   

メールアドレスが有効な場合はtrueを返します。それ以外の場合は、falseを返します。

于 2012-10-15T11:01:33.870 に答える
-7

次の正規表現:

/^([\w]+)(.[\w]+)*@([\w]+)(.[\w]{2,3}){1,2}$/;
于 2009-05-02T17:20:09.213 に答える