Soru JavaScript'te bir e-posta adresi nasıl doğrulanır?


E-posta adresi JavaScript’te nasıl doğrulanabilir?


3259


Menşei


Bu çözüm basit olsa da, bunun insanların Googling olacağı ve siteye kendi girişini hak ettiği yararlı şeylerden biri olduğundan eminim Bakılacak ilk yer sadece Google olsaydı :) Sadece her seferinde kapalı olanların kopyalarına bak. - Esteban Küber
Eminim ki bu insanlar için Googling olacağı yararlı şeylerden biri.  lol, aslında bu soruya bu şekilde rastladım! - Peter C
olası kopyası E-posta adreslerini doğrulamak için en iyi düzenli ifade nedir? - Brad Mace
lütfen bu hakkı alın, çok fazla web sitesi, "firstName@secondName.name" e-posta adresimi beğenmiyor, üst düzey alan adlarının tümü 2 veya 3 harften bitmiyor. - Ian Ringrose
E-postalar için normal kullanım kontrollerinden yararlanıyorum. "Foo+bar@gmail.com" e-posta adresimin geçersiz olduğunu söylemekten yoruldum. En iyi seçenek, kullanıcının e-postasını iki kez yazmasını istemek ve bir regex denetleyicisi kullanmanız GEREKİRSE, kullanıcıya e-posta adreslerinin geçerli görünmediğini söyleyin ve yazdıklarından emin olup olmadıklarını sorun. sağ. Hatta, WHE, regexp kontrolünde kontrol edilmediğine işaret edecek kadar ileri gitmeli, ancak formun gönderilmesini engellememelidir. - Soundfx4


Cevaplar:


kullanma düzenli ifadeler Muhtemelen en iyi yoldur. Bir sürü test görebilirsiniz İşte (dan alınan krom)

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(String(email).toLowerCase());
}

İşte, unicode'u kabul eden normal açıklamanın örneği:

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

Ancak, birinin yalnızca JavaScript doğrulamasına güvenmemesi gerektiğini unutmayın. JavaScript kolayca devre dışı bırakılabilir. Bu, sunucu tarafında da doğrulanmalıdır.

İşte yukarıdaki eylemin bir örneği:

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 validate() {
  var $result = $("#result");
  var 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").bind("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>


3795



Bu regex geçerli, kullanımda olan e-postaları ortadan kaldırır. Kullanmayın. Google, "RFC822" veya "RFC2822" için uygun bir normal ifade almak için. - Randal Schwartz
@Randall: Bunun izin vermeyeceği bir e-posta adresi örneği verebilir misiniz? - rossipedia
@GoodPerson Ben sadece ona serin bir e-posta adresi var n @ ai e-posta denedim. Ama ne yazık ki, gmail izin vermedi. Kimin başkaları ile e-posta yoluyla iletişim kurmakta daha büyük sorunları olduğunu sitemdeki javascript doğrulamadan daha fazla şüpheliyim! Ama meydan okumaya gittiğin için teşekkürler. - Ben Roberts
Bunun "yeterince iyi" olduğunu söyleyen herkes için: bak, sadece bu problemi yanlış düşünüyorsun. Bu iyi. Kullanıcılarınız için yapabileceğiniz bir seçim. Buna kızmam. Ama bilirsin, teknik olarak konuşuyorsun, kanıtsal olarak yanılıyorsun. - Wayne Burkett
E-posta adreslerini doğrulayamazsınız. Bir e-posta adresini doğrulayabilen tek kişi e-posta adresinin sağlayıcısıdır. Örneğin, bu cevap şu e-posta adreslerini söylüyor: %2@gmail.com, "%2"@gmail.com, "a..b"@gmail.com, "a_b"@gmail.com, _@gmail.com, 1@gmail.com , 1_example@something.gmail.com hepsi geçerli, ancak Gmail bu e-posta adreslerinden hiçbirine izin vermeyecek. Bunu, e-posta adresini kabul ederek ve bu e-posta adresine, kullanıcının geçerliliğini onaylamak için ziyaret etmesi gereken bir kod / bağlantı ile bir e-posta mesajı göndererek yapmalısınız. - Kevin Fegan


Sadece tamlık için, Burada başka bir RFC 2822 uyumlu regex var

Resmi standart olarak bilinir RFC 2822. Geçerli e-posta adreslerinin uyması gereken sözdizimini açıklar. Yapabilirsin (ama yapmamalısın - Okumaya devam etmek) bu düzenli ifadeyle uygulayın:

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

(...) Çift tırnak ve köşeli parantez kullanarak sözdizimini çıkarırsak, RFC 2822'nin daha pratik bir uygulamasına geçilir. Bugün geçerli kullanımda tüm e-posta adreslerinin% 99.99'una denk düşecektir.

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

Yapabileceğiniz başka bir değişiklik, herhangi bir iki harfli ülke kodu üst düzey etki alanına ve yalnızca belirli genel üst düzey etki alanlarına izin vermektir. Bu regex gibi kukla e-posta adreslerini filtreler asdf@adsf.adsf. Sen yeni üst düzey alan adları eklendikçe onu güncellemeye ihtiyaç duyacak.

[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

Bu yüzden resmi standartlara uyulmasa bile, yapılması gerekenler vardır. Çevrimiçi kütüphanelerden veya tartışma forumlarından düzenli ifadeleri körü körüne kopyalamayın. Bunları her zaman kendi verilerinizde ve kendi uygulamalarınızda test edin.

Vurgulamak benim


612



NB: "Gerçek kullanımda bugün"kod yazıldığı zaman geçerli olabilir, 200x." irade muhtemelen o belirli yılın ötesinde kullanımda kalır. (Ben her "meh için bir kuruş olsaydı, hiç kimse bir düzeltmek zorunda kaldım" özel olanlar dışında bir 4 + -terter TLD kullanmaz, ben dünyanın bakır ve nikel pazarını köşeye;)) - Piskvor
RFC 2822'nin pratik uygulaması için, tek char etki alanı uzantılarını önlemek için sonlandırma biraz değiştirilmelidir. / [A-z0-9! # $% & '* + \ / =? ^ _{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_{|} ~ -] +):?. (:? [A-0-9] ([a-z0-9 -] * [a-0-9]) \) + [a-z0- 9] [a-z0-9 -] * [a-0-9] / - will Farrell
Ayrıca, bir kullanıcı, e-posta adresini büyük harfle yazdığında yanlış negatifleri önlemek için (A: a A sermayeli A) olmalıdır. - Don Rolling
Spec ile d._.___d@gmail.com geçerli bir e-posta değil, ancak bu hala doğru olanı tespit ediyor - Raptor
@DonRolling Bunu yapmayın. Bu sadece "A'dan Z'ye, a'dan z'ye" anlamına gelmez, aynı zamanda "[\] ^ _` "anlamına da gelir çünkü bunlar arasında "Z" ve "a". kullanım \wveya daha iyisi, e-posta adresini herhangi bir şey yapmadan önce yalnızca küçük harfle küçültmek, çünkü bu zaten bir kongre. - kirb


Gerçekten basit bir doğrulama isteyen insanlar için Jaymon'un cevabını biraz değiştirdim:

anystring@anystring.anystring

Düzenli ifade:

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

Örnek JavaScript işlevi:

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

551



/\S+@\S+\.\S+/.test('name@again@example.com')  true - neoascetic
@neoascetic Shazam! /[^\s@]+@[^\s@]+\.[^\s@]+/.test('name@again@example.com') // false - n0nag0n
Birkaç kullanıcı için sorun yaratabilecek ve gelecekte geçerli olmayabilecek 20x uzun bir şey uygulayabilirsiniz ya da ImmortalFirefly'nin versiyonunu yakalayarak en azından gerçek görünmesini sağlamak için çaba harcayabilirsiniz. Uygulamanıza bağlı olarak, birisinin giremeyeceği bir yere rastlamak daha muhtemel olabilir çünkü gerçekte olmayan e-posta adreslerini girerek problemlere neden olan kişilerden ziyade alışılmamış e-postalarını kabul etmiyorsunuz (girerek yine de yapabilirler) % 100 geçerli bir RFC2822 e-posta adresi, ancak kayıt dışı bir kullanıcı adı veya alan adı kullanarak). Upvoted! - user83358
@ImmortalFirefly, sağladığınız normal ifade eşleşecektir name@again@example.com. Çizginizi bir JavaScript konsoluna yapıştırmayı deneyin. Niyetinin sadece metnin '^' metninin başlamasını ve '$' operatörlerinin metninin bitmesini gerektiren tüm metnin eşleşmesi gerektiğine inanıyorum. Kullandığım kişi /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test('name@again@example.com') - OregonTrail
İnsanlar yanlış pozitiflerden şikayet etmeyi bırakacak mı? Bu, hataların% 95'ini yakalamak için basit bir ifadedir. Gerçekten BÜYÜK regex kullanmak istiyorsanız ve hala mükemmel olmaktan uzak, diğer cevaplara bakın. - André Chalella


İfadeleri doğrulamak için normal ifadeyi kullanmaya karar verdiğiniz ikinci anı anlamanız gereken bir şey var: Muhtemelen iyi bir fikir değil. Bununla bir kez anlaşmaya geldiğinizde, orada sizi yarıya kadar götürecek birçok uygulama var. Bu makale onları güzel bir şekilde özetliyor.

Kısacası, ancak, kesinlikle, kullanıcı girdiği aslında bir e-posta aslında bir e-posta göndermek ve ne olduğunu görmek olduğunu emin olmak için olumlu bir yoldur. Bunun dışında hepsi sadece tahmin ediyor.


293



-1 neden zamanımı düzenli ifadeyi geçmeyen bir e-posta adresini doğrulamak için harcamak isterim? - kommradHomer
@PaoloBergantino Ben sadece regex kötü bir fikir ve sadece bir tahmin değil dışında yok. Bir regex geçersiz adresi% 100 geçersiz bir adres. - kommradHomer
KommradHomer - bir "regex geçersiz" adresi hemen hemen her zaman geçerlidir, çünkü bir e-posta adresini doğrulamak için kullandığınız herhangi bir regex hemen hemen yanlıştır ve geçerli e-posta adreslerini hariç tutacaktır. Bir e-posta adresi name_part@domain_part ve hemen hemen her şey, dahil olmak üzere bir @, name_part dosyasında geçerlidir; Adres foo@bar@machine.subdomain.example.museum yasaldır, ancak foo\@bar@machine..... E-posta alan adına ulaştığında, ör. 'example.com', alanın postayı "yerel olarak" yönlendirebildiğinden, "garip" kullanıcı adları ve ana bilgisayar adları mevcut olabilir. - Stephen P
Voyager'ın cevabındaki ikinci regex stackoverflow.com/a/1373724/69697 kullanım için pratiktir ve neredeyse hiç yanlış negatif olmamalıdır. Burada KommradHomer'e katılıyorum - gerekmiyorsa neden bir e-posta gönderiyorsunuz? Anlaşılmaz ifadeler ve kodları basit tutma arzusu için refleksöz hoşnutsuzluğu anlayabilirim, ancak bu, sunucunuzu bir çok sorundan hemen sonra geçersiz olan öğeleri ayıklayabilmenizi sağlayan bir kod satırıdır. Tek başına bir regex yararsızdır, ancak sunucu doğrulama için iyi bir tamamlayıcı olarak hizmet vermektedir. - Ben Regenspan
Ben "neredeyse her zaman geçerli" kabul ben muhtemelen onu abartmak, ama ben çok sık web siteleri tarafından reddedilen benim (mükemmel geçerli ve çalışıyor) e-posta adresleri vardı, çünkü bir .us alan adı veya kullandığım + solunda @ - Birçok yer bu korkunç hataları düzeltmiştir, ancak yerel kısım (@ 'nın solunda) olabilir her şey alan sahibi ister. -> "foo@bar.com"@example.com <- geçerli bir e-posta adresidir. - Stephen P


Vay, burada bir sürü karmaşıklık var. Tek yapmanız gereken en açık sözdizimi hatalarını yakalamaksa, şöyle bir şey yapardım:

\S+@\S+

Genellikle kullanıcının yaptığı en belirgin hataları yakalar ve formun çoğunlukla doğru olduğunu, yani JavaScript doğrulamasının ne olduğunu doğrular.


282



E-posta gönderme ve ne olduğunu görme +1, bir e-posta adresini doğrulamak için tek gerçek emin yoldur, bu nedenle basit bir normal ifade eşleşmesinden daha fazlasına gerek yoktur. - kommradHomer
Bunu hala basit tutabilir, ancak bir "." Olduğundan emin olmak için biraz daha fazlasını yapabilirsiniz. @ sonra bir yerde sadece rakamlar veya rakamlar tarafından takip edilir, bu yüzden benim gibi şeyler @ burada, ben @ here @ ve me @ herecom geçerli değil ... ^ \ S + @ \ S + [\.] [0-9a-z ] + $ - Tim Franklin
E-posta adreslerinin boşluk içerebileceğini düşünüyorum. Kullanması daha iyi .+@.+ - Sam
/\S+@\S+/.test("áéíóúý@ÁÉÍÓÚÝð")  true - gtournie
@gtournie Kimsenin umurunda değil. Bunu kimse e-posta alanına girmeyecek kazaylaVe bu, tüm ön uç doğrulamanın şu anlama gelir: Kişilerin yanlışlıkla bir e-posta alanında kendi adı gibi yanlış bilgileri girmesini önlemek. - meagar♦


HTML5'in kendisinde e-posta doğrulaması var. Tarayıcınız HTML5'i destekliyorsa, aşağıdaki kodu kullanabilirsiniz.

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

jsFiddle bağlantı

İtibaren HTML5 özelliği:

bir Geçerli E eşleşen bir dizedir emailUnicode olan karakter kümesi olan aşağıdaki ABNF'nin üretimi.

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 >

Bu şart bir kasıtlı ihlal Aynı anda çok katı ("@" karakterinden önce) çok belirsiz ("@" karakterinden sonra) çok belirsiz olan e-posta adresleri için bir sözdizimi tanımlayan RFC 5322'nin açıklaması ve çok lax (açıklamalara, boşluk karakterlerine ve alıntılara izin verilir) Çoğu kullanıcı tarafından bilinmeyen tavır dizileri) pratik kullanım için burada.

Aşağıdaki JavaScript ve Perl uyumlu düzenli ifade, yukarıdaki tanımlamanın bir uygulamasıdır.

/^[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])?)*$/

165



Bu iyi, ama bununla ilgili problem, bir form etiketle ve bir submit Herkesin yapma lüksüne sahip olmayan girdi. Ayrıca, hata mesajını gerçekten stil edemezsiniz. - Jason
Aşağıda, sizi formdan kurtarıp gönderen bir yanıt ekledim. Ancak, evet, tarayıcılar genellikle tam bir RFC 822 doğrulaması değil, yalnızca bir makul olasılık kontrolü uygularlar. - Boldewyn
@ br1: "a" üst düzey alan adı olmadığı için geçersiz değil. Intranet'inizin bazı IP’lere bir çözümü var mı? - flying sheep
Html5 e-posta alanı türü, kullanıcı @ e-postası gibi e-postaları kabul eder - Puce
Bu Safari'de çalışmıyor - Mr Wilde


Bunu en iyi çözüm olarak buldum:

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

Aşağıdaki formatlara izin verir:

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 (tırnaklar arasındaki boşluk)
8. üñîçøðé@example.com (Yerel kısımdaki Unicode karakterleri)
9. üñîçøðé@üñîçøðé.com (Alan adındaki Unicode karakterleri)
10. Pelé@example.com (Latin)
11. δοκιμή@παράδειγμα.δοκιμή (Yunanca)
12. 我 買 @ 屋企. 香港 (Çince)
13. 甲 斐 @ 黒 川. 日本 (Japonca)
14. чебурашка@ящик-с-апельсинами.рф (Kiril)

Açıkça çok yönlüdür ve tüm önemli uluslararası karakterlere izin verirken, hala temel bir şey ya da herhangi birşeyi biçimlendirir. RFC tarafından teknik olarak izin verilen alanları engelleyecek, ancak bunu yapmaktan çok mutlu olduğum için çok az.


95



Bu tam olarak yaptığım şey. Bütün bu “karmaşık” cevaplar sorun yaratır: ya kod kodu IDN'ye izin vermez ya da sabit bir TLD seti kullanmazlar ya da kullanıcının e-posta-önekinde (@ @) gibi [@ çµ.ö] gibi karakterleri kullanmamasını gereksiz yere kısıtlarlar. veya alan adı. Güvenlik nedenlerinden dolayı doğrulama yapmak için ön uçtaki JavaScript (nedenin arka uç kullanımı için değil) yeterli değildir. Öyleyse neden sadece kullanıcının temel yazım hatalarını önlemesine yardımcı olmuyorsunuz? Temel yazım hataları şunlardır: TLD veya kullanıcı öneki (önce @) veya etki alanı parçası veya yanlış yazmayı unutun @ gibi . (ya da tam tersi). Çünkü sunucu tarafında daha kısıtlayıcı olmak zorundayız. - Hafenkranich
Bazı garip nedenlerden dolayı username@domain.com bu modelle çalışmıyor - einstein
@einstein Örneğinize uyuyor: regex101.com/r/vX2eJ0/1 - Andrew
Senin ifadesine göre "_.............. kamal@gmail.com" geçerli olmamalıdır! - Kamal Nayan
Bu çözüm ile tinker yapmak istiyorsanız, örneklerle birlikte RegEx'i burada bulabilirsiniz: regex101.com/r/AzzGQU/2 - ryanm


Modern tarayıcılarda @ Sushil'in cevabının üstüne saf JavaScript ve DOM:

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);
}

Kemanda bir örnek oluşturdum. http://jsfiddle.net/boldewyn/2b6d5/. Özellik algılama ve çıplak kemikleri doğrulama ile birlikte Squirtle'nın cevabıDüzenli ifade katliamından kurtarır ve eski tarayıcılarda korkmaz.


76



Bu, sorunla uğraşmak için akıllıca bir fikirdir, ancak tarayıcıların da berbat doğrulamaları olduğu için işe yaramamaktadır. Örneğin. .@a olarak doğrular true Chrome, Firefox ve Safari'nin mevcut sürümlerinde. - Hank
@HenryJackson Ne yazık ki, bu durumda evet. Bunun nedeni RFC'ye göre geçerli bir e-posta adresidir (intranetleri düşünün). Tarayıcılar çok dar ve doğru negatifler üretiyorlarsa ızgaralanırlardı. - Boldewyn
Özellik algılama ve zarif bozulma içerecek şekilde güncellendi, şimdi yeni tarayıcılarda kırılmıyor, ancak istediğiniz herhangi bir regex kullanılıyor. - Ronny
Güzel çözüm. Ne yazık ki bu sadece HTML5 + içindir. - Edward Olamisan
Bu, asıl soruya verilen en iyi çözümdür. Evet, HTML5 kullanıyor, ancak bu seviyede bir doğruluk gerektiren uygulamaların büyük bir kısmı zaten HTML5'e zaten başka bir şekilde güveniyor olacak. Birinin e-postasının geçerli olup olmadıklarını doğrulamadan geçerli olup olmadığına karar vermemiz imkansızdır, bu yüzden doğrulamak için çok fazla zaman ya da çaba harcamamalıyız. Belli bir sözdizimi veya yaramazlık girişimi için hızlı bir kontrol, harcamamız gereken tüm çabalardır. - Woody Payne


JavaScript normal ifadeyle eşleşebilir:

emailAddress.match( / some_regex /);

İşte bir RFC22 e-postalar için düzenli ifade:

^((?>[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)>)$

63



Düğüm bu normal ifadeyi derlemek için görünmüyor - Kato
@Kato: dahil olmak üzere bazı uyumsuz uzantıları kullanır (?> geri izlemeyi durdurmak ve (?<angle><)…(?(angle)>) uzun sağlamaktan kaçınmak |. - Ry-♦


Bu doğru RFC822 sürümüdür.

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);
}

60



Yuck. Bu işe yarayabilir, ama bu çok çirkin, sence de öyle değil mi? - bgmCoder
Fonksiyonun 'formu', ne yaptığını göstermek için daha fazla :-) - Bob van Luijt
RegExp Nesnesi ile çalışan bir sürüm için teşekkür ederiz. - Thomas
@BGM: Çalışmayan güzel bir işleve sahip olmak ister misiniz? - Piskvor
@BGM: Devam et ve düzenle. Cevap, sonuçta "topluluk wiki" olarak işaretlendi. - Piskvor