正規表現を使用して JavaScript で電子メール アドレスを検証する最良の方法は何ですか?
101 に答える
正規表現を使用するのがおそらく最良の方法です。ここで一連のテストを見ることができます(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>
次の形式で非常に単純な検証が必要な人のために、ジェイモンの回答を少し変更しました。
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'));
完全を期すために、ここに別の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
したがって、公式の基準に従っている場合でも、トレードオフが必要です。オンラインライブラリやディスカッションフォーラムから正規表現を盲目的にコピーしないでください。常に自分のデータと自分のアプリケーションでテストしてください。
強調鉱山
うわー、ここには多くの複雑さがあります。最も明白な構文エラーをキャッチするだけなら、次のようにします。
^\S+@\S+$
通常、ユーザーが犯した最も明白なエラーをキャッチし、フォームがほぼ正しいことを保証します。これが JavaScript 検証のすべてです。
編集:「.」も確認できます。を使用したメールで
/^\S+@\S+\.\S+$/
正規表現を使用して電子メールを検証することを決定した瞬間に理解しなければならないことがあります。それはおそらく良い考えではありません。あなたがそれに同意すると、そこにあなたを途中で連れて行くことができる多くの実装がそこにあります、この記事はそれらをうまく要約します。
ただし、要するに、ユーザーが入力したものが実際に電子メールであることを絶対的に確実に確認する唯一の方法は、実際に電子メールを送信して何が起こるかを確認することです。それ以外はすべて推測です。
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 の意図的な違反です。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])?)*$/
これが最良の解決策であることがわかりました:
/^[^\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 で技術的に許可されているスペースをブロックしますが、非常にまれであるため、喜んでブロックします。
最新のブラウザーでは、純粋な 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からの必要最小限の検証と組み合わせることで、正規表現の大量虐殺から解放され、古いブラウザーで動作しなくなります。
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)>)$
これは正しい 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);
}
これは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;}
これを行う:
^([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 : メールの先頭 (@ 記号の前) では、大文字と小文字が区別される場合があります (仕様による) 。ただし、大文字と小文字を区別する電子メールを使用する人はおそらく問題に慣れているため、実際には、大文字と小文字を区別しないことが安全な想定です。詳細:メール アドレスは大文字と小文字を区別しますか?
この問題を解決することを本当に楽しみにしています。だから私は上記の電子メール検証正規表現を変更しました
オリジナル
/^(([^<>()\[\]\\.,;:\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の例を渡します。
そして、ここで結果を見ることができます。
正規表現を使用して入力文字列を検証し、それが電子メールかどうかを確認しないでください。これは複雑すぎて、すべてのケースをカバーすることはできません。
ケースの 90% しかカバーできないので、次のように記述します。
function isPossiblyValidEmail(txt) {
return txt.length > 5 && txt.indexOf('@')>0;
}
あなたはそれを洗練することができます。たとえば、「aaa@」は有効です。しかし、全体として要点はわかります。そして、夢中にならないでください...単純な 90% のソリューションは、機能しない 100% のソリューションよりも優れています。
世界はよりシンプルなコードを必要としています...
100% 正しい電子メール バリデータを取得することは困難です。それを正しくする唯一の実際の方法は、アカウントにテスト メールを送信することです。とはいえ、妥当なものを取得していることを確認するのに役立ついくつかの基本的なチェックがあります。
改善すべき点:
new の代わりに、次のように out を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])\]))$/
ウィキペディアの標準メール構文:
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
バリデータ関数内で次のコードを使用します。
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
}
ゼニガメとは対照的に、これは複雑な解決策ですが、電子メールを適切に検証するという非常に優れた仕事をします。
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'); }
正規表現に関する私の知識はあまりよくありません。そのため、最初に単純な正規表現で一般的な構文をチェックし、その後で他の関数でより具体的なオプションをチェックします。これは最善の技術的解決策ではないかもしれませんが、この方法により、より柔軟で高速になります。
私が遭遇した最も一般的なエラーは、スペース (特に最初と最後) と、場合によっては 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
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>
どうやら、それだけです:
/^([\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から取得。
しかしもちろん、それは国際化を無視しています。
これは、正規表現を使用して電子メール アドレスを検証することに関する非常に優れた議論です。「正規表現を検証する電子メール アドレスの比較」
参考までに、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
すべての電子メール アドレス テスト ケースに合格する 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-.]+]*/
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})?$/
欠陥がある場合に備えてここに投稿しますが、常に私のニーズには完璧でした.
~
私の場合、私は避けたかったので、別の解決策#
を使用しました:
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>');
}
@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);
}
このコードは、こちらのブログで共有しています。
セクトリアンのソリューションはうまく機能しますが、私のリンターに失敗していました。だから私はいくつかのエスケープを追加しました:
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);
}
シンプルに保ち、ユーザーを満足させたいと思っています。また、わかりやすいコードを好みます。正規表現はそうではありません。
function isValidEmail(value) {
const atLocation = value.lastIndexOf("@");
const dotLocation = value.lastIndexOf(".");
return (
atLocation > 0 &&
dotLocation > atLocation + 1 &&
dotLocation < value.length - 1
);
};
- 最後の「@」と最後の「.」の位置を取得します。
- 「@」が最初の文字でないことを確認してください(その前に何かがあります)
- 「。」を確認してください。「@」の後にあり、それらの間に少なくとも1つの文字があること
- 「。」の後に少なくとも 1 つの文字があることを確認してください。
これにより、無効な電子メール アドレスの通過が許可されますか? 確かに、ボタンの有効化/無効化、エラー メッセージの表示などを可能にする優れたユーザー エクスペリエンスのために、これ以上のことは必要ないと思います。そのアドレスへのメール。
これは、フロントエンドの電子メール検証に使用する関数です。(正規表現は 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>
ベスト プラクティスは、HTML5 組み込みの電子メール タグを使用することです。
<input type="email" name="email">
または、@ と . 文字列から以下に示します。
^[a-zA-Z0-9_\-.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-.]+$
これでも正規表現に一致する無効な電子メールが生成されることに注意してください。すべてをキャッチすることはほとんど不可能ですが、これにより状況が少し改善されます。
次の正規表現を使用します。
/^[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);
}
@ , のみを許可する必要があります。、_
次の正規表現の検証:
- @ の前にスペース文字はありません
- @ の後に (-) と (.) を一緒に使用しないでください @ の後に特殊文字は使用できません @ の前に 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;
}
}
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
JavaScript で正規表現を使用してメールのパターンに対して任意の文字列をテストする関数を作成するのはどうですか。英国やオーストラリアのように、地域によってメールアドレスが大きく異なる可能性があることがわかっているため、通常は.co.uk
or.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
次の正規表現の検証:
- @ の前にスペース文字はありません
- @ の後に (-) と (.) を一緒にしないでください
- @ の前に @ 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; } }
正規表現を追加します-他の言語の文字や大文字などの小さな問題を解決しました
^[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})?$
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"});
この正規表現は、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)?$/,
ではごきげんよう !!!!!
私はそれが正規表現ではないことを知っていますが、とにかく...
これは 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');
}
});
}
これは、単純な電子メールの正規表現ではうまく機能します。
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
これは機能し、フォームに検証/通知機能を含むソリューションです:
このリンクで実行できます
ジャバスクリプト
(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>
これが私のやり方です。標準の電子メール パターンをチェックするために 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>
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);
私の同僚の 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, '');
};
}
でとてもシンプル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>
電子メールの検証正規表現:
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) { });
}
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 フォーム検証
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を返します。
次の正規表現:
/^([\w]+)(.[\w]+)*@([\w]+)(.[\w]{2,3}){1,2}$/;