Pytanie Sprawdzanie poprawności wiadomości e-mail w języku JavaScript [duplikat]


To pytanie już zawiera odpowiedź:

Ten kod zawsze ostrzega "null", co oznacza, że ​​ciąg nie pasuje do wyrażenia.

var pattern = "^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$"; 

function isEmailAddress(str) {

    str = "azamsharp@gmail.com";      

    alert(str.match(pattern)); 
    return str.match(pattern);    

}

76
2018-06-02 16:40


pochodzenie


Sprawdzanie poprawności poczty e-mail jest trudne. Pragmatycznie można tylko założyć, że zawiera on jeden @ i że istnieje co najmniej jeden. śledzenie @ gdzieś ale to jest naprawdę, jeśli chcesz uniknąć alienacji przynajmniej niektórych użytkowników. Chyba że sprawdzasz poprawność dla konkretnej domeny, w której zasady nazywania e-maili są bardziej uporządkowane. - AnthonyWJones
Ściśle mówiąc nie można nawet założyć, że istnieje. gdzieś. Zobacz na przykład ua ccTLD, która ma rekordy MX na najwyższym poziomie. - Ian
Dlaczego nie możesz użyć typu = "e-mail" w formularzu? @azamsharp - PT_C


Odpowiedzi:


Jeśli zdefiniujesz wyrażenie regularne jako ciąg znaków, wówczas wszystkie ukośniki odwrotne muszą zostać zmienione, więc zamiast "\ w" powinieneś mieć "\\ w".

Możesz też zdefiniować go jako wyrażenie regularne:

var pattern = /^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$/; 

BTW, proszę nie sprawdzać poprawności adresów e-mail po stronie klienta. Twoja regularna ekspresja jest zbyt prosta do przekazania dla solidnego wdrożenia.

Zobacz prawdziwą rzecz: http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html


61
2018-06-02 16:45



To wyrażenie regularne nie obsługuje adresów takich jak john.smith@gmail.com - Nadia Alramli
nie obsługuje wiadomości e-mail, takich jak emailadd@gmail.com.sa - Amr Badawy
Dlaczego adresy e-mail nie powinny być sprawdzane po stronie klienta? Z pewnością jest to znacznie szybsza forma sprawdzania poprawności klienta, ponieważ nie musimy tworzyć wielu żądań HTTP w sieci w celu sprawdzania poprawności danych? (co jest szczególnie ważne w przypadku aplikacji mobilnych, które mogą kontaktować się z serwerem za pośrednictwem wolnego Wi-Fi lub sieci komórkowych). - Ciaran Gallagher
Wyrażenie to pozostawia wiele do życzenia: 1) nie dopuszcza wielu ważnych nazw użytkownika, takich jak myślnik i plus; 2) blokuje domeny z więcej niż 2 częściami, znalezione w wielu ccTLD, takich jak geek.co.il; 3) blokuje wiele nowych TLD, które używają 4 lub więcej znaków, takich jak mobi i info; 4) nie obsługuje w ogóle IDN. - Guss
@ CiaranGallagher, masz rację co do osiągów. Jednak z punktu widzenia bezpieczeństwa, JS po stronie klienta nie chroniłoby Cię przed XSS, SQL injection ani innymi słabymi punktami. IMHO, najlepiej przeprowadzić podstawową walidację na froncie, aby użytkownicy nie utracili danych, które wprowadzili (EX: sprawdź puste pola, zatwierdź numery telefonów lub SSN). Należy jednak zawsze zabezpieczyć swoją aplikację za pomocą kodu sanityzacyjnego o wysokim kaliber open source na serwerze. - Rustavore


to jest ten, którego używam na mojej stronie.

http://www.zparacha.com/validate-email-address-using-javascript-regular-expression/

/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/


26
2018-06-27 23:55



Nie obsługuje adresowania "+", tj. "User+label@gmail.com". - Jolly Roger
To może się nie udać dla niektórych nowe domeny - GP89
Dobra robota i dzięki. To jedna z lepszych, które widziałem. - RushVan
To też jest nieważne. Spójrz na listę domen najwyższego poziomu iana.org/domains/root/db - Daniel


Używam tej funkcji przez jakiś czas. zwraca wartość boolowską.

// Validates email address of course.
function validEmail(e) {
    var filter = /^\s*[\w\-\+_]+(\.[\w\-\+_]+)*\@[\w\-\+_]+\.[\w\-\+_]+(\.[\w\-\+_]+)*\s*$/;
    return String(e).search (filter) != -1;
}

13
2017-08-31 20:46



Wiem, że jest stary, ale można to uprościć do: return String (e) .match (/ ^ \ s * [\ w \ - \ + _] + (?: \. [\ W \ - \ + _] +) * \ @ [\ w \ - \ + _] + \. [\ w \ - \ + _] + (?: \. [\ w \ - \ + _] +) * \ s * $ /) ; Zwróci wartość null, jeśli nie zostanie dopasowana, a tablica pojedynczego elementu adresu e-mail sama się dopasuje. - Andir
Myślę, że Twoje wyrażenie regularne nie sprawdza się, powiedzmy, nicolas. @ Gmail.com ... Czy to jest zgodne z RFC822? Nie jestem pewien. Ktoś do sprawdzenia? - nembleton
Podaje aaa-------@gmail.com jako prawdziwe - Imran


Możesz być zainteresowany to pytanie (lub ten), co podkreśla fakt, że określenie prawidłowych adresów e-mail za pomocą wyrażeń regularnych jest bardzo trudnym problemem do rozwiązania (jeśli w ogóle możliwe do rozwiązania)


11
2018-06-02 16:47





function isEmailAddress(str) {
   var pattern =/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
   return pattern.test(str);  // returns a boolean 
}

8
2018-04-24 09:59



według tego test@test.info nie jest e-mailem - tborychowski


z prostszym

Oto ona:

var regexEmail = /\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
var email = document.getElementById("txtEmail");

if (regexEmail.test(email.value)) {
    alert("It's Okay")
} else {
    alert("Not Okay")

}

powodzenia.


7
2017-12-06 14:12



w momencie pisania tego, to działało dobrze ... miejmy nadzieję, że pozostanie w ten sposób, ponieważ przeszedłem przez kilka z nich;) - Andrew Odendaal
HUEI90@gmail.com' przejdzie ten wzór, ale doda ^ => /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/ może naprawić problem - Huei Tan


Czasami większość strony rejestracji i logowania musi potwierdzać pocztę e-mail. W tym przykładzie nauczysz się prostego sprawdzania poprawności wiadomości e-mail. Najpierw weź tekst w html i przycisk tak, jak to

<input type='text' id='txtEmail'/>
<input type='submit' name='submit' onclick='checkEmail();'/>

<script>
    function checkEmail() {
        var email = document.getElementById('txtEmail');
        var filter = /^(([^<>()\[\]\\.,;:\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 (!filter.test(email.value)) {
            alert('Please provide a valid email address');
            email.focus;
            return false;
        }
    }
</script>

możesz również sprawdzić, używając tego wyrażenia regularnego

<input type='text' id='txtEmail'/>
<input type='submit' name='submit' onclick='checkEmail();'/>

<script>
    function checkEmail() {

        var email = document.getElementById('txtEmail');
        var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

        if (!filter.test(email.value)) {
            alert('Please provide a valid email address');
            email.focus;
            return false;
        }
    }
</script>

Sprawdź to wydanie demonstracyjne, które możesz sprawdzić tutaj

function checkEmail() {
        var email = document.getElementById('txtEmail');
        var filter = /^(([^<>()\[\]\\.,;:\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 (!filter.test(email.value)) {
            alert('Please provide a valid email address');
            email.focus;
            return false;
        }
    }
<input type='text' id='txtEmail'/>
<input type='submit' name='submit' onclick='checkEmail();'/>

jeśli wiadomość e-mail jest nieprawidłowa, należy wysłać wiadomość z ostrzeżeniem, jeśli ważna wiadomość e-mail nie zawiera ostrzeżenia. aby uzyskać więcej informacji na temat wyrażeń regularnych

https://www.w3schools.com/jsref/jsref_obj_regexp.asp

mam nadzieję, że ci to pomoże


7
2017-09-23 17:07



Jaki jest sens {2,4} Jeśli masz + po tym? - developerbmw
następnie wyświetli nieprawidłowy e-mail, czy możesz podać przykładowy adres e-mail? - Shafiqul Islam


Być może zainteresuje Cię to spojrzenie strona zawiera listę wyrażeń regularnych do sprawdzania poprawności adresów e-mail, które obejmują bardziej ogólne sprawy.


5
2018-06-02 16:49





Sprawdzanie poprawności wiadomości e-mail jest łatwe do uniknięcia. Dlatego polecam, abyś użył Verimail.js.

Czemu?

  • Sprawdzanie składni (zgodnie z RFC 822).
  • Sprawdzanie TLD IANA
  • Propozycja pisowni dla najczęstszych domen TLD i domen e-mail
  • Odmawiaj tymczasowe domeny kont e-mail, takie jak mailinator.com
  • Obsługa wtyczek jQuery

Kolejną wspaniałą rzeczą w Verimail.js jest to, że zawiera sugestię dotyczącą pisowni najpopularniejszych domen e-mail i zarejestrowanych domen TLD. Może to drastycznie obniżyć współczynnik odrzuceń dla użytkowników, którzy błędnie używają popularnych nazw domen, takich jak gmail.com, hotmail.com, aol.com, itp.

Przykład:

  • test@gnail.com -> Czy chodziło Ci o test@gmail.com?
  • test@hottmail.con -> Czy chodziło Ci o test@hotmail.com?

Jak tego użyć?

Najprostszym sposobem jest pobranie i uwzględnienie verimail.jquery.js na Twojej stronie. Następnie podłącz Verimail uruchamiając następującą funkcję w polu wejściowym, które wymaga sprawdzenia poprawności:

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

Element message jest opcjonalnym elementem wyświetlającym komunikat, taki jak "Niepoprawny e-mail .." lub "Czy chodziło Ci o test@gmail.com?". Jeśli masz formularz i chcesz kontynuować, jeśli wiadomość jest zweryfikowana, możesz użyć funkcji getVerimailStatus, jak pokazano poniżej:

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

Funkcja getVerimailStatus zwraca kod liczby całkowitej zgodnie z obiektem Comfirm.AlphaMail.Verimail.Status. Jak pokazano powyżej, jeśli status jest ujemną liczbą całkowitą, to sprawdzanie poprawności powinno być traktowane jako niepowodzenie. Ale jeśli wartość jest większa lub równa 0, to walidacja powinna być traktowana jako sukces.


5
2017-10-09 16:17





Używałem tego ....

/^[\w._-]+[+]?[\w._-]+@[\w.-]+\.[a-zA-Z]{2,6}$/

To pozwala na to + przed @  (xyz+abc@xyz.com)


3
2017-12-28 06:27



To jedyny wzór tutaj, który faktycznie działa !! - tborychowski
Nie, są domeny dłuższe niż 6 znaków, takie jak .software na przykład. - emix