1

ユーザーの電子メール アドレスが 3 つのうちのいずれかで終わっていることを確認するにはどうすればよいですか

@camel.com、@mel.com、@camelofegypt.com

これはこれまでの私のコードです。ユーザーがテキストを提供したかどうかを検証するだけです

if ($.trim($("#email").val()).length === 0) {
alert('You must provide valid input');
return false;

メールアドレスの検証をコードに実装したいと考えています。

4

7 に答える 7

2

正規表現のライブラリ で説明されているように、メール アドレスを真に検証することは困難です。ただし、上記のWebサイトから取得した以下はうまく機能します。

正式な標準は RFC 2822 として知られています。これには、有効な電子メール アドレスが準拠しなければならない構文が記述されています。次の正規表現を使用して実装できます (ただし、読むべきではありません)。

(?:[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])+)\])

単純な正規表現:

\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b

電子メール アドレスの検証のトレードオフ:

はい、私のお気に入りの正規表現が一致しない電子メール アドレスがたくさんあります。最も頻繁に引用される例は、.museum トップ レベル ドメインのアドレスです。これは、正規表現でトップ レベル ドメインに許可されている 4 文字よりも長くなっています。.museum の電子メール アドレスを使用しているユーザーの数は非常に少ないため、このトレードオフを受け入れます。JGsoft Web サイトの注文フォームまたはニュースレター購読フォームが .museum アドレスを拒否したという苦情は一度もありません (上記の正規表現を使用して電子メール アドレスを検証しているため、.museum アドレスは拒否されます)。

ただし、特定のドメインだけが必要な場合は、間違いなくその可能性がありますが、これらの正規表現に失敗するため、電子メール アドレスを拒否することはお勧めしません。

上記を取得すると、次の正規表現を使用して簡単に検証できます。

\b[A-Z0-9._%+-]+@(camel|mel|camelofegypt)\.com\b

また:

^[A-Z0-9._%+-]+@(camel|mel|camelofegypt)\.com$

これら 2 つの正規表現の違いは単純です。最初の正規表現は、長い文字列に含まれる電子メール アドレスに一致します。2 番目の正規表現は、文字列全体が電子メール アドレスである場合にのみ一致します。

JavaScript 正規表現:

/\b[A-Z0-9._%+-]+@(camel|mel|camelofegypt)\.com\b/i

また:

/^[A-Z0-9._%+-]+@(camel|mel|camelofegypt)\.com$/i

特記事項:は と同じであるiため、パラメータを使用して正規表現で大文字と小文字を区別しないようにする必要があります。上記の正規表現で行ったこと。John@CAMEL.comjohn@camel.com

于 2013-08-08T05:30:13.317 に答える
0

このJavaScriptを試してください

function IsEmail(email) {
 var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  return regex.test(email);
}
于 2013-08-08T05:32:01.067 に答える