JQuery kullanarak e-posta doğrulaması


356

JQuery'de yeniyim ve e-posta adreslerini doğrulamak için nasıl kullanılacağını merak ediyordum.


Bir e-posta adresini "doğrulamaya" başlamadan önce şunu okumalısınız: hackernoon.com/…
Mikko

Yanıtlar:


703

Bunun için normal eski javascript'i kullanabilirsiniz:

function isEmail(email) {
  var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  return regex.test(email);
}

66
Evet, jQuery hala javascript olduğunu unutmayın :)
Fabian

36
Bu normal ifade çoğu gerçek dünya adresinin geçerli olduğunu düşünmesine rağmen, hala çok sayıda yanlış pozitif ve yanlış negatif var. Örneğin , Wikipedia'daki geçerli ve geçersiz e-posta adreslerinin örneklerine bakın .
Arseny

1
@Umingo email@127.0.0.1 hala geçerli bir e-postadır, ancak yine de daha iyi bir şekilde yazılabilir. Alan adının hiçbir kısmı [a-z0-9] dışında bir karakterle başlayamaz (büyük / küçük harf duyarsız). Ayrıca, geçerli e-postanın (ve etki alanının) bazı sınama sınırı vardır ve bu da sınanmamıştır.
tomis

10
Yeni üst düzey alan adlarının daha yaygın hale gelmesiyle, bu normal ifadenin .systems ve .poker vb. Değişikliklerinin geçerli geçerli TLD'ler olması gerekir, ancak normal ifade kontrolünde başarısız olurlar
Liath

3
Başka bir yanıta Theo'nun Başına yorum, değiştirmek gerekir var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;etmek var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,6})+$/;vb yeni TLD en benzeri .museum, desteklemeye
Ira Herman

165

E-postayı Doğrulamak için jQuery İşlevi

Eklentileri kullanmaktan gerçekten hoşlanmıyorum, özellikle formumun yalnızca doğrulanması gereken bir alan varsa. Bu işlevi kullanıyorum ve e-posta form alanını doğrulamam gerektiğinde çağırıyorum.

 function validateEmail($email) {
  var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
  return emailReg.test( $email );
}

ve şimdi bunu kullanmak için

if( !validateEmail(emailaddress)) { /* do stuff here */ }

Şerefe!


16
Sadece emailReg.test($email);
dönmelisin

7
Bu sadece boş bir e-posta adresi için doğrudur. örn emailReg.text("") true. Ben sadece e-postaRe var deklarasyonuna kadar fonksiyon var o zaman:return ( $email.length > 0 && emailReg.test($email))
Diziet

14
Şimdi .museum gibi 6 karakterlerle domainname uzantılara sahip beri değiştirmek isteyeyim bunun emailaddress geçerliliğini kontrol etmek için regex, modası geçmiş var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;içinvar emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,6})?$/;
Theo

3
haklısın @ h.coates! JQuery aslında yerleşik bir e-posta doğrulaması olduğunu umarak bu iş parçacığına geldim. İlerleyin, bunlar aradığınız droidler değil ...
iGanja

3
@ Theo'nun noktası hayati öneme sahiptir, ancak TLD'nin gerçek uzunluğu 6'dan fazla olmalıdır, uzantı için teorik üst sınır 63 karakterdir. şu anda en uzun olan 20 yaşın
Jeroenv3

41

Ben kullanırım jQuery doğrulama eklentisi birkaç nedeni.

Doğruladın, tamam harika, şimdi ne olacak? Hatayı görüntülemeniz, geçerli olduğunda silmeyi işlemeniz, toplamda kaç hatayı görüntülemeniz gerekiyor? Sizin için idare edebileceği birçok şey var, tekerleği yeniden icat etmeye gerek yok.

Ayrıca, bir başka büyük fayda da bir CDN'de barındırılmasıdır, bu cevap sırasındaki mevcut sürüm burada bulunabilir: http://www.asp.net/ajaxLibrary/CDNjQueryValidate16.ashx Bu, istemci için daha hızlı yükleme süreleri anlamına gelir.


6
Tamam ... tekerleği yeniden keşfetmeye gerek yok. Ancak bir alanı doğrulamak için neden onlarca KB Javascript yüklemem gerekiyor? İhtiyacınız olan tek şey yeni bir tekerlekse, bir araba fabrikası inşa etmek gibi :)
kraftb

3
@kraftb Cevabımda da belirtildiği gibi, yalnızca metnin kendisini doğrulamakla kalmayıp, doğrulama ile ilgili işlem ve görüntüleme.
Nick Craver

5
Bu @NickCraver için teşekkürler: Bu gerçekten bir e-posta doğrulamasını ele alma sorununa "en iyi uygulama" yaklaşımı gibi görünüyor. Bu kesinlikle bir tekerlek almak için bir fabrika inşa etmek (tüm işi yapmak için libs yazmak) gibi DEĞİLDİR. Arabanızda bir vagon tekerleğini nasıl alacağınızı anlamaya çalışmak yerine, tekerleği modern bir araca monte etmek için fabrikadan gelen talimatları takip etmek gibi (arabayı krikolayın, tekerleği yerleştirin - bijon somunlarını takın). Bu eklentinin kullanımı son derece basittir. Form doğrulamasını yapmak için kelimenin tam anlamıyla bir içerme, bazı ek açıklamalar ve tek bir yöntem çağrısı gelir.
jfgrissom

3
Şimdi 'tekerleği yeniden icat' metaforunu yeniden icat ediyorsun!
Dom Vinyard


38

Bak http: //bassistance.de/jquery-plugins/jquery-plugin-validation/ . Formlar için güçlü doğrulama sistemi oluşturmaya izin veren güzel jQuery eklentisidir. Burada bazı yararlı örnekler var . Dolayısıyla, formdaki e-posta alanı doğrulaması şöyle görünecektir:

$("#myform").validate({
  rules: {
    field: {
      required: true,
      email: true
    }
  }
});

Ayrıntılar ve örnekler için E-posta yöntemi belgelerine bakın .


1
Sonuncusu hala hayatta)
Andrew Bashtannik

6
ancak kabul edilen biçim x@x(bu garip) olmalı x@x.xBunu nasıl düzeltebilirim?
Basheer AL-MOMANI

2
@ BasheerAL-MOMANI [ jqueryvalidation.org/jQuery.validator.methods/] $.validator.methods.email = function( value, element ) { return this.optional( element ) || //^.+@.+\..+$/.test( value ); }
Bill Gillingham

17
<script type="text/javascript">
    $(document).ready(function() {
      $('.form_error').hide();
      $('#submit').click(function(){
           var name = $('#name').val();
           var email = $('#email').val();
           var phone = $('#phone').val();
           var message = $('#message').val();
           if(name== ''){
              $('#name').next().show();
              return false;
            }
            if(email== ''){
               $('#email').next().show();
               return false;
            }
            if(IsEmail(email)==false){
                $('#invalid_email').show();
                return false;
            }

            if(phone== ''){
                $('#phone').next().show();
                return false;
            }
            if(message== ''){
                $('#message').next().show();
                return false;
            }
            //ajax call php page
            $.post("send.php", $("#contactform").serialize(),  function(response) {
            $('#contactform').fadeOut('slow',function(){
                $('#success').html(response);
                $('#success').fadeIn('slow');
               });
             });
             return false;
          });
      });
      function IsEmail(email) {
        var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
        if(!regex.test(email)) {
           return false;
        }else{
           return true;
        }
      }
  </script>

<form action="" method="post" id="contactform">
                            <table class="contact-table">
                              <tr>
                                <td><label for="name">Name :</label></td>
                                <td class="name"> <input name="name" id="name" type="text" placeholder="Please enter your name" class="contact-input"><span class="form_error">Please enter your name</span></td>
                              </tr>
                              <tr>
                                <td><label for="email">Email :</label></td>
                                <td class="email"><input name="email" id="email" type="text" placeholder="Please enter your email" class="contact-input"><span class="form_error">Please enter your email</span>
                                  <span class="form_error" id="invalid_email">This email is not valid</span></td>
                              </tr>
                              <tr>
                                <td><label for="phone">Phone :</label></td>
                                <td class="phone"><input name="phone" id="phone" type="text" placeholder="Please enter your phone" class="contact-input"><span class="form_error">Please enter your phone</span></td>
                              </tr>
                              <tr>
                                <td><label for="message">Message :</label></td>
                                <td class="message"><textarea name="message" id="message" class="contact-input"></textarea><span class="form_error">Please enter your message</span></td>
                              </tr>
                              <tr>
                                <td></td>
                                <td>
                                  <input type="submit" class="contactform-buttons" id="submit"value="Send" />
                                  <input type="reset" class="contactform-buttons" id="" value="Clear" />
                                </td>
                              </tr>
                            </table>
     </form>
     <div id="success" style="color:red;"></div>

15

<!-- Dont forget to include the jQuery library here -->
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript">

$(document).ready(function() {

    $("#validate").keyup(function(){

        var email = $("#validate").val();

        if(email != 0)
        {
            if(isValidEmailAddress(email))
            {
                $("#validEmail").css({
                    "background-image": "url('validYes.png')"
                });
            } else {
                $("#validEmail").css({
                    "background-image": "url('validNo.png')"
                });
            }
        } else {
            $("#validEmail").css({
                "background-image": "none"
            });         
        }

    });

});

function isValidEmailAddress(emailAddress) {
    var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
    return pattern.test(emailAddress);
}

</script>

<style>
    #validEmail
    {
        margin-top: 4px;
        margin-left: 9px;
        position: absolute;
        width: 16px;
        height: 16px;
    }

    .text
    {
        font-family: Arial, Tahoma, Helvetica;
    }
</style>

    <title>Live Email Validation with jQuery Demo</title>
</head>
<body>
    <div class="text"><h1>Reynoldsftw.com - Live Email Validation</h1><h2>Type in an email address in the box below:</h2></div>
    <div><input type="text" id="validate" width="30"><span id="validEmail"></span></div>
    <div class="text"><P>More script and css style

: www.htmldrive.net


Kaynak: htmldrive.com


14

Verimail.js'yi tavsiye ederim , ayrıca bir JQuery eklentisi var .

Neden? Verimail aşağıdakileri destekler:

  • Sözdizimi doğrulaması (RFC 822'ye göre)
  • IANA TLD doğrulaması
  • En yaygın TLD'ler ve e-posta alanları için yazım önerisi
  • Mailinator.com gibi geçici e-posta hesabı alan adlarını reddet

Doğrulamanın yanı sıra, Verimail.js de size önerilerde bulunur. Bu nedenle, ortak bir e-posta etki alanına (hotmail.com, gmail.com, vb.) Çok benzeyen yanlış TLD veya etki alanına sahip bir e-posta yazarsanız, bunu algılayabilir ve bir düzeltme önerebilir.

Örnekler:

  • test@gnail.con -> Test @ ortalama mü gmail.com ?
  • test@hey.nwt -> Bunu mu demek istediniz: test @ hey. net ?
  • test@hottmail.com -> Test @ ortalama mü hotmail.com ?

Ve bunun gibi..

JQuery ile kullanmak için sitenize verimail.jquery.js dosyasını ekleyin ve aşağıdaki işlevi çalıştırın:

$("input#email-address").verimail({
    messageElement: "p#status-message"
});

Mesaj öğesi, içinde mesajın gösterileceği bir öğedir. Bu, "E-postanız geçersiz" ile "Bunu mu demek istediniz ...?" İle ilgili her şey olabilir.

Bir formunuz varsa ve e-posta geçerli olmadığı sürece gönderilememesi için formunuzu kısıtlamak istiyorsanız, aşağıda gösterildiği gibi getVerimailStatus işlevini kullanarak durumu kontrol edebilirsiniz:

if($("input#email-address").getVerimailStatus() < 0){
    // Invalid
}else{
    // Valid
}

Bu işlev, Comfirm.AlphaMail.Verimail.Status nesnesine göre bir tamsayı durum kodu döndürür. Ancak genel kural, 0'ın altındaki kodların hataları gösteren kodlar olmasıdır.


.getVerimailStatus()Sayısal durum kodları, sadece bir dize değerini dönmez success, errormuhtemelen ya pending(sonuncusu doğrulamadım).
Niko Nyman

14

function isValidEmailAddress(emailAddress) {
    var pattern = /^([a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+(\.[a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+)*|"((([ \t]*\r\n)?[ \t]+)?([\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]))*(([ \t]*\r\n)?[ \t]+)?")@(([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;
    return pattern.test(emailAddress);
};

if( !isValidEmailAddress( emailaddress ) ) { /* do stuff here (email is invalid) */ }

Bu cevap bu cevap kullanıcı Luca Filosofi tarafından sağlanan bu cevap


Bunu ASP.NET MVC Razor sayfasında kullanıyorsanız, @karakterden başka bir @karakterle kaçmayı unutmayın . Bunun gibi @@, aksi takdirde derleme hatası alırsınız.
Rosdi Kasım


10

Bu, daha kapsamlı bir doğrulama gerçekleştirir, örneğin, john..doe @ example.com gibi kullanıcı adında birbirini izleyen noktalara karşı kontrol eder.

function isValidEmail(email)
{
    return /^[a-z0-9]+([-._][a-z0-9]+)*@([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,4}$/.test(email)
        && /^(?=.{1,64}@.{4,64}$)(?=.{6,100}$).*/.test(email);
}

Bkz JavaScript düzenli ifade kullanarak doğrulamak e-posta adresi .


1
Ancak ardışık noktalar aslında geçersiz mi? Aksine, geçerli e-posta adreslerini bunu yaparak hariç tutacağınızı düşünüyorum.
icktoofay

9

Diğerlerinin de belirttiği gibi, e-posta adresinin bir kalıpla eşleşip eşleşmediğini kontrol etmek için normal ifadeyi kullanabilirsiniz. Ancak yine de kalıpla eşleşen e-postalarınız olabilir, ancak yine de sıçrama veya sahte spam e-postalarım olabilir.

normal ifade ile kontrol

var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
return regex.test(email);

gerçek bir e-posta doğrulama API'sı ile kontrol etme

E-posta adresinin gerçek ve şu anda etkin olup olmadığını kontrol edecek bir API kullanabilirsiniz.

var emailAddress = "foo@bar.com"
response = $.get("https://isitarealemail.com/api/email/validate?email=" +
    emailAddress,
    function responseHandler(data) {
        if (data.status === 'valid') {
            // the email is valid and the mail box is active
        } else {
            // the email is incorrect or unable to be tested.
        }
    })

Daha fazla bilgi için https://isitarealemail.com veya blog gönderisine bakın


8

Temel bir formunuz varsa, giriş e-posta türünü yapmanız yeterlidir: <input type="email" required>

Bu, HTML5 özniteliklerini kullanan tarayıcılar için çalışır ve daha sonra JS'ye bile ihtiyacınız yoktur. Yukarıdaki komut dosyalarından bazılarında bile e-posta doğrulamasını kullanmak çok işe yaramaz:

some@email.com so@em.co my@fakemail.net

vb ... Hepsi "gerçek" e-posta olarak doğrulanacaktır. Bu nedenle, kullanıcının aynı adresi girmesini sağlamak için e-posta adresini iki kez girmesi gerektiğinden emin olmak daha iyi olur. Ancak e-posta adresinin gerçek olduğunu garanti etmek çok zor olurdu, ancak bir yol. Ancak, bunun bir e-posta olduğundan emin değilseniz, HTML5 girişine sadık kalın.

FIDDLE ÖRNEĞİ

Bu FireFox ve Chrome'da çalışır. Internet Explorer'da çalışmayabilir ... Ama internet explorer berbat. İşte o zaman ...


Regexp yöntemi genellikle @ bc (bağlı JSFiddle örneğinizin en son Chrome'u kullanmasına izin verir) gibi açıkça saçma e-postaları önler, bu nedenle HTML5 çözümü açıkça yetersiz bir çözümdür.
SnowInferno

güzel. Öyleyse, sadece HTML5 gibi desen eşleşmesini "yapmak" gerekiyordu gibi kullanmaya ne dersiniz? Neden bunu chromebook'unuzda denemiyorsunuz
isaac weathers

8

MVC / ASP.NET'te Javascript E-posta Doğrulaması

Fabian'ın cevabını kullanırken karşılaştığım problem, Razor @sembolü nedeniyle bir MVC görünümünde uygulamak . Bundan @kaçmak için ek bir sembol eklemeniz gerekir, şöyle:@@

MVC ustura önlemek için

function isEmail(email) {
  var regex = /^([a-zA-Z0-9_.+-])+\@@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  return regex.test(email);
}

Bu sayfada başka bir yerde görmedim, bu yüzden yararlı olabileceğini düşündüm.

DÜZENLE

İşte Microsoft'un kullanımını açıklayan bir bağlantı .
Ben sadece yukarıdaki kodu test ve aşağıdaki js var:

function validateEmail(email) {
  var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/; 
  return regex.test(email);
}

Bu da tam olarak ne yapması gerektiğini yapıyor.


@nbrogi Ne demek bu çalışmıyor? Ben sadece tekrar kontrol ve bu aşağıdaki js üretir Kodunuza var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/; ne oluyor?
Trevor Nestman

Üzgünüm, şu anda emin değilim, tamamen değiştirdim.
nkkollaw

Lütfen ne zaman yapabileceğinizi bana bildirin. Eğer bu kötü bir bilgiyse, o zaman onu atarım. Mümkün olduğunda faydalı bilgiler sağlamaya çalışıyorum ve bu bir MVC görünümünde normal ifade yazarken bana yardımcı oldu.
Trevor Nestman

Yine, bunun neden reddedildiğini bilmek istiyorum. Tam olarak istediğim şeyi yapar, bu da @bir regex'te sembol üretmektir .cshtml. Normalde @sembolden sonraki her şeyi ustura kodu olarak ele almaya çalışır , ancak çift bunu @@önler.
Trevor Nestman

Gördüğüm ana sorun, regex regex adlı bir değişkene ayarlanmış ikinci
kod bloğunda

7
function isValidEmail(emailText) {
    var pattern = new RegExp(/^((([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);
    return pattern.test(emailText);
};

Şunun gibi kullanın:

if( !isValidEmail(myEmail) ) { /* do things if myEmail is valid. */ }

6
function validateEmail(emailaddress){  
   var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;  
   if(!emailReg.test(emailaddress)) {  
        alert("Please enter valid email id");
   }       
}

5
<script type = "text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type = "text/javascript">
    function ValidateEmail(email) {
        var expr = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
        return expr.test(email);
    };
    $("#btnValidate").live("click", function () {
        if (!ValidateEmail($("#txtEmail").val())) {
            alert("Invalid email address.");
        }
        else {
            alert("Valid email address.");
        }
    });
</script>
<input type = "text" id = "txtEmail" />
<input type = "button" id = "btnValidate" value = "Validate" />

4

Buraya indi ..... burada sona erdi: https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address

... aşağıdaki normal ifadeyi sağladı:

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

... jQuery Validation eklentisi benioku ile ilgili bir not sayesinde buldum: https://github.com/jzaefferer/jquery-validation/blob/master/README.md#reporting-an-issue

Yani, güncellenmiş sürümü @Fabian 'ın cevabı şöyle olacaktır:

function IsEmail(email) {
  var regex = /^[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])?)*$/;
  return regex.test(email);
}

umarım yardımcı olur


Bu benim için en iyi cevaptı - doğru döndü john..doe@example.comama bunun yanlış olmasını istiyor
Adam Knights

3

bunu kullan

if ($this.hasClass('tb-email')) {
    var email = $this.val();
    var txt = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    if (!txt.test(email)) {
        e.preventDefault();
        $this.addClass('error');
    } else {
        $this.removeClass('error');
    }
}

3

Hata Jquery Doğrulama Doğrulama Eklentisi'nde Sadece bunu değiştirmek için @ ile doğrulanır

kodu bununla değiştir

email: function( value, element ) {
    // From http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#e-mail-state-%28type=email%29
    // Retrieved 2014-01-14
    // If you have a problem with this implementation, report a bug against the above spec
    // Or use custom methods to implement your own email validation
    return this.optional( element ) || /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test( value );
}

3

Yıkıcı, yıl boyu süren RegEx maçlarından daha iyi korunabilir bir çözüm kullanmak isteyenler için , birkaç satır kod yazdım. Bayt kaydetmek isteyenleri düşünün, RegEx varyantına sadık kalın :)

Bu kısıtlar:

  • Dizede @ yok
  • Dizede nokta yok
  • @ 'Den sonra 2 noktadan fazla
  • Kullanıcı adındaki hatalı karakterler (@ işaretinden önce)
  • Dizede 2'den fazla @
  • Alan adındaki bozuk karakterler
  • Alt alan adındaki bozuk karakterler
  • TLD cinsinden kötü karakter
  • TLD - adresler

Her neyse, sızıntı yapmak hala mümkün, bu yüzden bunu sunucu tarafı doğrulama + e-posta bağlantısı doğrulaması ile birleştirdiğinizden emin olun.

İşte JSFiddle

 //validate email

var emailInput = $("#email").val(),
    emailParts = emailInput.split('@'),
    text = 'Enter a valid e-mail address!';

//at least one @, catches error
if (emailParts[1] == null || emailParts[1] == "" || emailParts[1] == undefined) { 

    yourErrorFunc(text);

} else {

    //split domain, subdomain and tld if existent
    var emailDomainParts = emailParts[1].split('.');

    //at least one . (dot), catches error
    if (emailDomainParts[1] == null || emailDomainParts[1] == "" || emailDomainParts[1] == undefined) { 

        yourErrorFunc(text); 

     } else {

        //more than 2 . (dots) in emailParts[1]
        if (!emailDomainParts[3] == null || !emailDomainParts[3] == "" || !emailDomainParts[3] == undefined) { 

            yourErrorFunc(text); 

        } else {

            //email user
            if (/[^a-z0-9!#$%&'*+-/=?^_`{|}~]/i.test(emailParts[0])) {

               yourErrorFunc(text);

            } else {

                //double @
                if (!emailParts[2] == null || !emailParts[2] == "" || !emailParts[2] == undefined) { 

                        yourErrorFunc(text); 

                } else {

                     //domain
                     if (/[^a-z0-9-]/i.test(emailDomainParts[0])) {

                         yourErrorFunc(text); 

                     } else {

                         //check for subdomain
                         if (emailDomainParts[2] == null || emailDomainParts[2] == "" || emailDomainParts[2] == undefined) { 

                             //TLD
                             if (/[^a-z]/i.test(emailDomainParts[1])) {

                                 yourErrorFunc(text);

                              } else {

                                 yourPassedFunc(); 

                              }

                        } else {

                             //subdomain
                             if (/[^a-z0-9-]/i.test(emailDomainParts[1])) {

                                 yourErrorFunc(text); 

                             } else {

                                  //TLD
                                  if (/[^a-z]/i.test(emailDomainParts[2])) {

                                      yourErrorFunc(text); 

                                  } else {

                                      yourPassedFunc();
}}}}}}}}}

3

JQuery Validation'u kullanabilir ve tek bir HTML satırında e-postayı ve e-posta doğrulama mesajını doğrulayabilirsiniz:type="email" required data-msg-email="Enter a valid email account!"

Kişisel bir mesaj yerleştirmek veya başka bir şekilde bu parametreyi yerleştirmek için data-msg-email parametresini kullanabilirsiniz; varsayılan mesaj görüntülenir: "Lütfen geçerli bir e-posta adresi girin."

Tam örnek:

<form class="cmxform" id="commentForm" method="get" action="">
  <fieldset>
    <p>
      <label for="cemail">E-Mail (required)</label>
      <input id="cemail" type="email" name="email" required data-msg-email="Enter a valid email account!">
    </p>
    <p>
      <input class="submit" type="submit" value="Submit">
    </p>
  </fieldset>
</form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery-validation@1.17.0/dist/jquery.validate.js"></script>
<script>
$("#commentForm").validate();
</script>

2
if($("input#email-address").getVerimailStatus() < 0) { 

(incorrect code)

}

if($("input#email-address").getVerimailStatus() == 'error') { 

(right code)

}

9
Cevabınızı ayrıntılı olarak açıklayabilir misiniz ... örneğin getVerimailStatus'un ek bir eklenti olduğunu belirtmelisiniz.
Dave Hogan

2
checkRegexp( email, /^((([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, "eg. ui@jquery.com" );

Referans: JQUERY UI WEB SİTESİ



2

Başka bir basit ve eksiksiz seçenek:

<input type="text" id="Email"/>
<div id="ClasSpan"></div>   
<input id="ValidMail" type="submit"  value="Valid"/>  


function IsEmail(email) {
    var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    return regex.test(email);
}

$("#ValidMail").click(function () {
    $('span', '#ClasSpan').empty().remove();
    if (IsEmail($("#Email").val())) {
        //aqui mi sentencia        
    }
    else {
        $('#ClasSpan').append('<span>Please enter a valid email</span>');
        $('#Email').keypress(function () {
            $('span', '#itemspan').empty().remove();
        });
    }
});

3
Stack Overflow, İngilizce bir sitedir. Lütfen başka dillerde içerik yayınlamayın.
Anders

2

Kendi işlevinizi oluşturabilirsiniz

function emailValidate(email){
    var check = "" + email;
    if((check.search('@')>=0)&&(check.search(/\./)>=0))
        if(check.search('@')<check.split('@')[1].search(/\./)+check.search('@')) return true;
        else return false;
    else return false;
}

alert(emailValidate('your.email@yahoo.com'));

1

Yeni yaptığım basitleştirilmiş bir şey, ihtiyacım olanı yapıyor. Sadece alfasayısal, nokta, alt çizgi ve @ ile sınırlandırılmıştır.

<input onKeyUp="testEmailChars(this);"><span id="a"></span>
function testEmailChars(el){
    var email = $(el).val();
    if ( /^[a-zA-Z0-9_@.-]+$/.test(email)==true ){
        $("#a").html("valid");
    } else {
        $("#a").html("not valid");
    }
}

Başkalarının yardımıyla yapıldı


1

Bu normal ifade, abc@abc.com.com.com.com gibi yinelenen alan adlarını önler; abc@abc.co.in gibi yalnızca iki kez alan adına izin verir. Ayrıca 123abc@abc.com gibi numaralardan statring yapılmasına izin vermez

 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)?$/, 

Herşey gönlünce olsun !!!!!


1

Düğme durumu işlerken, yazarken e-postayı doğrulayın.

$("#email").on("input", function(){
    var email = $("#email").val();
    var filter = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
    if (!filter.test(email)) {
      $(".invalid-email:empty").append("Invalid Email Address");
      $("#submit").attr("disabled", true);
    } else {
      $("#submit").attr("disabled", false);
      $(".invalid-email").empty();
    }
  });

1

jquery doğrulaması kullanıyorsanız

Ben bir yöntem oluşturdu emailCustomFormatkullanılan regexsize koßulları karşılamak için değiştirebilirsiniz benim custm formatı için

jQuery.validator.addMethod("emailCustomFormat", function (value, element) {
        return this.optional(element) || /^([\w-\.]+@@([\w-]+\.)+[\w-]{2,4})?$/.test(value);
    }, abp.localization.localize("FormValidationMessageEmail"));// localized message based on current language

o zaman böyle kullanabilirsiniz

$("#myform").validate({
  rules: {
    field: {
      required: true,
      emailCustomFormat : true
    }
  }
});

bu normal ifade kabul edildi

abc@abc.abc, abc@abc.abcd ama bu değil

abc@abc, abc@abc.a,abc@abc.abcde

umarım bu sana yardımcı olur

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.