JavaScriptでメールアドレスを検証するための正規表現はありますか?
@
、;com
など)を、彼らが望む(そして、彼らは私を送って何でも受け入れる)場合、ユーザはそれらを修正しましょう
JavaScriptでメールアドレスを検証するための正規表現はありますか?
@
、;com
など)を、彼らが望む(そして、彼らは私を送って何でも受け入れる)場合、ユーザはそれらを修正しましょう
回答:
正規表現を使用するのがおそらく最善の方法です。あなたはここでたくさんのテストを見ることができます(クロムから取られた)
function validateEmail(email) {
const 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(String(email).toLowerCase());
}
これは、Unicodeを受け入れる通常の式の例です。
const re = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
ただし、JavaScriptの検証だけに依存するべきではないことに注意してください。JavaScriptは簡単に無効にすることができます。これもサーバー側で検証する必要があります。
上記の動作例は次のとおりです。
function validateEmail(email) {
const 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);
}
function 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;
}
$("#validate").on("click", validate);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<p>Enter an email address:</p>
<input id='email'>
<button type='submit' id='validate'>Validate!</button>
</form>
<h2 id='result'></h2>
%2@gmail.com, "%2"@gmail.com, "a..b"@gmail.com, "a_b"@gmail.com, _@gmail.com, 1@gmail.com , 1_example@something.gmail.com
すべて有効ですが、Gmailではこれらのメールアドレスを許可しません。これを行うには、電子メールアドレスを受け入れ、その電子メールアドレスに、ユーザーが有効性を確認するためにアクセスする必要があるコード/リンクを記載した電子メールメッセージを送信します。
以下の形式で本当に単純な検証をしたい人のために、Jaymonの回答を少し修正しました。
anystring@anystring.anystring
正規表現:
/\S+@\S+\.\S+/
JavaScript関数の例:
function validateEmail(email)
{
var re = /\S+@\S+\.\S+/;
return re.test(email);
}
console.log(validateEmail('anystring@anystring.anystring'));
name@again@example.com
ます。行をJavaScriptコンソールに貼り付けてみてください。私はあなたの意図はテキスト全体だけに一致することであったと私は信じています。テキストの始まり '^'とテキストの終わり '$'演算子が必要です。私が使用しているのは/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test('name@again@example.com')
@@@.@
ですか?:D
完全を期すために、ここには別のRFC 2822準拠の正規表現があります
公式の標準は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])+)\])
(...)二重引用符と角括弧を使用して構文を省略すると、RFC 2822のより実用的な実装が得られます。それでも、今日実際に使用されているすべての電子メールアドレスの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
したがって、公式の基準に従っている場合でも、トレードオフが必要です。オンラインライブラリやディスカッションフォーラムから正規表現を盲目的にコピーしないでください。常に自分のデータと自分のアプリケーションでテストしてください。
強調鉱山
{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_
{|}〜-] +)* @(?:[a-z0-9](?:[a-z0-9 -] * [a-z0-9])?\。)+ [a-z0-9] [a-z0-9-] * [a-z0-9] /
\w
とにかく慣例であるため、それを使用する前にメールアドレスを小文字にしてください。
うわー、ここには多くの複雑さがあります。あなたがしたいことが最も明白な構文エラーをキャッチすることだけであるなら、私はこのようなことをします:
^\S+@\S+$
これは通常、ユーザーが行う最も明白なエラーをキャッチし、フォームがほぼ正しいことを保証します。これがJavaScript検証のすべてです。
.+@.+
/\S+@\S+/.test("áéíóúý@ÁÉÍÓÚÝð")
true
電子メールを検証するために正規表現を使用することを決定した2番目のことを理解する必要があることがあります。それはおそらく良いアイデアではありません。いったんそれに慣れると、途中に到達できる多くの実装がそこにあります。この記事ではそれらをうまくまとめています。
ただし、要するに、ユーザーが入力した内容が実際にメールであることを確実に確実に確認する唯一の方法は、実際にメールを送信して、何が起こるかを確認することです。それ以外はすべて推測です。
name_part@domain_part
と、実質的には何も、含めて@
、name_partで有効です。住所foo@bar@machine.subdomain.example.museum
は合法ですが、エスケープする必要がありますfoo\@bar@machine....
。メールが「example.com」などのドメインに到達すると、そのドメインはメールを「ローカル」にルーティングできるため、「奇妙な」ユーザー名とホスト名が存在する可能性があります。
.us
ますが、ドメインを持っているため、または+
の左側にを使用したために、(完全に有効で機能している)電子メールアドレスがWebサイトによって拒否されることが多すぎます@
-多くの場所は、これらの悪質なエラーを修正しましたが、(@の左側)ローカル部分は可能何でもドメインの所有者が望んでいます。-> "foo@bar.com"@example.com <-は有効なメールアドレスです。
HTML5自体はメール検証を備えています。ブラウザがHTML5をサポートしている場合は、次のコードを使用できます。
<form><input type="email" placeholder="me@example.com" required>
<input type="submit">
</form>
jsFiddleリンク
HTML5仕様から:
有効な電子メールアドレスが一致する文字列で
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の故意の違反です。RFC5322は、電子メールアドレスの構文が厳密すぎ( "@"文字の前)、曖昧すぎ( "@"文字の後)、緩い(コメントを許可する)構文を定義しています。 、空白文字、引用符で囲まれた文字列(ほとんどのユーザーにとってなじみのない方法)は、ここで実際に使用されます。
次の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])?)*$/
form
タグの内側にあり、submit
入力によって送信する必要があることです。また、エラーメッセージのスタイルを実際に設定することはできません。
user@email
が、たとえば、PHP は受け入れfilter_var
ません。これは問題を引き起こす可能性があります。
これが最良の解決策であることがわかりました:
/^[^\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.чебурашка@ящик-с-апельсинами.рф(キリル文字)
それは明らかに汎用性が高く、基本的なanything@anything.anythingフォーマットを適用しながら、すべての重要な国際文字を許可します。RFCで技術的に許可されているスペースをブロックしますが、それらは非常にまれであるため、これを行うことができます。
@
よう.
(またはその逆)。当然のことながら、サーバー側の制限をさらに厳しくする必要があります。
username@domain.com
、このパターンでは機能しません
a@b@c@d.x.y.@.z
、多分彼らは悪い時間を過ごすに値するのでしょうか?:D
最新のブラウザーでは、純粋な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の必要最低限の検証を組み合わせることで、正規表現の大虐殺から解放され、古いブラウザに煩わされることはありません。
.@a
同様true
に検証します。
これは正しい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);
}
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)>)$
(?>
バックトラッキングを停止したり、冗長な(?<angle><)…(?(angle)>)
を提供したりするのを避けるなど、互換性のない拡張機能をいくつか使用しています|
。
すべての電子メールアドレスには、アットマーク(@)が含まれています。その必要条件をテストします。
email.indexOf("@") > 0
もっと複雑なことを気にしないでください。電子メールがRFC構文的に有効であるかどうかを完全に判断できたとしても、それがその電子メールを提供した人物のものであるかどうかはわかりません。それが本当に重要なことです。
これをテストするには、検証メッセージを送信します。
RFCに準拠した電子メールアドレスの正しい検証は、1行の正規表現で実現できるものではありません。私がPHPで見つけた最良のソリューションの記事は、有効なメールアドレスとは何ですか?。明らかに、Javaに移植されています。この関数は複雑すぎて、移植してJavaScriptで使用できないと思います。JavaScript / node.jsポート:https : //www.npmjs.com/package/email-addresses。
クライアントでデータを検証することをお勧めしますが、サーバーで検証を再確認してください。これを念頭に置いて、文字列がクライアントで有効な電子メールアドレスのように見えるかどうかを確認し、サーバーで厳密なチェックを実行できます。
文字列が有効なメールアドレスのように見えるかどうかを確認するために使用するJavaScript関数を次に示します。
function looksLikeMail(str) {
var lastAtPos = str.lastIndexOf('@');
var lastDotPos = str.lastIndexOf('.');
return (lastAtPos < lastDotPos && lastAtPos > 0 && str.indexOf('@@') == -1 && lastDotPos > 2 && (str.length - lastDotPos) > 2);
}
説明:
lastAtPos < lastDotPos
:(私が知る限り)サーバー名の一部にすることはできないため、ラスト@
はラストの前にする必要があります。.
@
lastAtPos > 0
:最後のの前に何か(メールのユーザー名)があるはず@
です。
str.indexOf('@@') == -1
:@@
住所にない必要があります。場合でも@
、電子メールのユーザー名の最後の文字として表示されますが、それは引用符で囲む必要がありそう"
という間だろう@
と最後の@
アドレスインチ
lastDotPos > 2
:たとえば、最後のドットの前には少なくとも3文字が必要a@b.com
です。
(str.length - lastDotPos) > 2
:最後のドットの後に2文字のドメインを形成するのに十分な文字が必要です。ブラケットが必要かどうかはわかりません。
@
、電子メールのユーザー名の最後の文字として表示され、それはとても引用されなければなら"
それの間だろう@
と最後の@
アドレスインチ」どう"@@"@example.com
ですか?
これは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;}
.museum
と.travel
ドメインを除外します(後の4文字の制限のため.
)
{2,4}
は、その有用なインジケーターにすぎません(「そのエラーが表示された場合、他のユーザーがいる可能性が高い」など)。最も基本的な 1は不足である+
局所的な部分で、このコメントボックスは小さすぎて、上記でコミットされたすべてのエラーを指摘できません。
return filter.test(email.value);
?
xn--clchc0ea0b2g2a9gcd
)ができました。まだ問題ありませんか?
これを行う:
[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に基づいています。これは、すべての電子メールアドレスが準拠しなければならない標準です。そして、なぜ「より単純な」ものに悩むのかはわかりません...とにかくそれをコピーして貼り付けるつもりです;)
メールアドレスをデータベースに保存するときは、しばしば小文字にします。実際には、正規表現は通常、大文字と小文字を区別しないようにマークできます。これらの場合、これは少し短くなります:
[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標準に含まれているため、ここでは省略されています。
/i
、正規表現の末尾にフラグがあるため、JavaScriptコードは大文字と小文字を区別しません。大文字と小文字を区別しない比較である必要があることを述べましたが、それをより明確にします。
私はこの問題を解決することを本当に楽しみにしています。上記のメール検証の正規表現を変更しました
元の
/^(([^<>()\[\]\\.,;:\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の電子メールアドレスの例を渡す。
john..doe@example.com
正しくないのですか?これは有効なコーナーケースです。
正規表現を使用して入力文字列を検証し、メールかどうかを確認しないでください。これは複雑すぎて、すべてのケースをカバーできるわけではありません。
ケースの90%しかカバーできないため、次のように記述します。
function isPossiblyValidEmail(txt) {
return txt.length > 5 && txt.indexOf('@')>0;
}
あなたはそれを洗練することができます。たとえば、「aaa @」は有効です。しかし、全体的には要点がわかります。そして、夢中にならないでください...単純な90%ソリューションは、機能しない100%ソリューションよりも優れています。
世界にはもっと単純なコードが必要です...
(.+)@(.*)
同じことをし、より短い。
入力したメールアドレスが有効かどうか、またはHTMLを使用していないかどうかを確認してください。
<input type="email"/>
検証用の関数を記述する必要はありません。
100%正しい電子メール検証ツールを取得するのは困難です。それを正しくする唯一の実際の方法は、アカウントにテストメールを送信することです。とはいえ、妥当なものを得ていることを確認するのに役立ついくつかの基本的なチェックがあります。
改善すべき点:
newの代わりにRegExp
、次のregexp
ように書き出してみてください。
if (reg.test(/@/))
次に、@
記号の後にピリオドがあることを確認し、@
sとピリオドの間に文字があることを確認します。
これは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])\]))$/
次のコードをバリデーター関数内で使用します。
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
}
abc@xyz
正規表現で認識されない完全に有効なメールです。
abc@tld
有効なメールアドレスです。
Regexアップデート2018!これを試して
let val = 'email@domain.com';
if(/^[a-z0-9][a-z0-9-_\.]+@([a-z]|[a-z0-9]?[a-z0-9-]+[a-z0-9])\.[a-z0-9]{2,10}(?:\.[a-z]{2,10})?$/.test(val)) {
console.log('passed');
}
typscriptバージョンの完成
//
export const emailValid = (val:string):boolean => /^[a-z0-9][a-z0-9-_\.]+@([a-z]|[a-z0-9]?[a-z0-9-]+[a-z0-9])\.[a-z0-9]{2,10}(?:\.[a-z]{2,10})?$/.test(val);
この質問に対するほとんどすべての回答は、Regexを使用して電子メールアドレスを検証することを推奨しています。Regexは初歩的な検証にのみ適していると思います。電子メールアドレスの検証の確認は、実際には2つの別個の問題であるようです。
1-電子メール形式の検証:電子メールがRFC 5322の電子メールの形式とパターンに準拠しているかどうか、およびTLDが実際に存在するかどうかを確認します。すべての有効なTLDのリストはここにあります。
たとえば、アドレスexample@example.ccc
は正規表現を通過しますが、有効なメールではありません。ccc
ますが、IANAによるトップレベルドメインではないはありません。
2-メールが実際に存在することを確認する:これを行うには、唯一のオプションはユーザーにメールを送信することです。
メールアドレスを検証するための正規表現
[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互換の現在の最上位の式を以下に示します。
/^[-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
.jobs
。さらに、ライブIDNがあります(そのほとんどは、投稿後に正式に承認されたもの.中國
です(2010年6月など)。ただし、ほとんどの場合、何年も作業中です)。
どうやら、それだけです:
/^([\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月1日、http: //fightingforalostcause.net/misc/2006/compare-email-regex.phpから取得。
しかし、もちろん、それは国際化を無視しています。
squirtleとは対照的に、これは複雑なソリューションですが、電子メールを適切に検証する非常に優れた機能を果たします。
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'); }
== true
例では必要ありません。
正規表現に関する私の知識はそれほど良くありません。そのため、まず単純な正規表現で一般的な構文を確認し、その後、他の関数でより具体的なオプションを確認します。これは最良の技術的解決策ではないかもしれませんが、このように私ははるかに柔軟で高速です。
私が遭遇した最も一般的なエラーは、スペース(特に最初と最後)と、場合によっては二重ドットです。
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
<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>
<script language="JavaScript1.2">
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)
}
</script>
<script>
function checkbae(){
if (document.layers || document.getElementById || document.all)
return checkemail()
else
return true
}
</script>
すべての電子メールアドレステストケースに合格する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
住所フィールドのダッシュは有効です
さあ行こう :
または正規表現:
Regex = /(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@[*[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+]*/
ASP.NET MVC内でMicrosoftが提供する正規表現は
/^[\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$/
欠陥がある場合に備えてここに投稿します。ただし、常に自分のニーズにぴったりです。