Ελέγξτε τη διεύθυνση ηλεκτρονικού ταχυδρομείου με JavaScript και κανονικές εκφράσεις

Πριν από λίγο καιρό έβαλα ένα Έλεγχος ισχύος κωδικού πρόσβασης χρησιμοποιώντας JavaScript και Κανονικές εκφράσεις. Με την ίδια σημείωση, μπορείτε επίσης να ελέγξετε τη δομή μιας διεύθυνσης email χρησιμοποιώντας την ίδια μεθοδολογία κανονικής έκφρασης (regex).

Εάν το στοιχείο φόρμας σας έχει το id = "διεύθυνση email" και προσθέτετε μια φόρμα onSubmit = "επιστροφή checkEmail ();", Αυτή είναι μια συνάρτηση Javascript που μπορείτε να χρησιμοποιήσετε για να επιστρέψετε μια ειδοποίηση εάν η διεύθυνση email έχει έγκυρη δομή ή όχι:

function checkEmail() {
var email = document.getElementById('emailaddress');
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;
}
}

Η συνάρτηση επικυρώνει τα περιεχόμενα του email σε αυτό του φίλτρου. Εάν η σύγκριση αποτύχει, εμφανίζεται μια ειδοποίηση και επιστρέφει την εστίαση στο πεδίο διεύθυνσης email!

41 Σχόλια

  1. 1

    Για φόρμες με πολλές διευθύνσεις email, καλό θα ήταν να κάνετε class = "emailaddress". Εάν έχετε τη βιβλιοθήκη prototype.js (http://www.prototypejs.org) που περιλαμβάνονται στη σελίδα μπορείτε να κάνετε κάτι σαν αυτό:

    var valid = true?
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    $$ ('. emailaddress'). κάθε (λειτουργία (email) {
    εάν (! filter.test (email.value)) {
    ειδοποίηση (; Παρακαλώ δώστε μια έγκυρη διεύθυνση email;);
    email.focus;
    έγκυρο = false;
    }
    })?
    έγκυρη επιστροφή

  2. 5
  3. 7

    Μου αρέσει η ιδέα, αλλά θα δίσταζα να υιοθετήσω αυτήν τη συγκεκριμένη τακτική έκφραση χωρίς περιγραφή των νομικών διευθύνσεων ηλεκτρονικού ταχυδρομείου που δεν δέχεται και ποιες παράνομες διευθύνσεις επιτρέπει.

    Για παράδειγμα μιας τακτικής έκφρασης που κάνει αξιοπρεπή δουλειά παράλληλα με μια εξήγηση των περιπτώσεων που δεν καλύπτει, δείτε αυτό:

    http://www.regular-expressions.info/email.html

    Η προσωπική μου προτίμηση είναι να καλύψω τις περισσότερες από τις απλές περιπτώσεις και να εκδώσω μια προειδοποίηση για οτιδήποτε άλλο, αντί να την απορρίψω. Εάν ο Μπομπ πραγματικά θέλει να υποβάλει bob@com.museum αντί bob@museum.com, γιατί να μην τον αφήσετε;

    • 8

      Γεια Reg,

      Μπορείτε να δοκιμάσετε το Regex χρησιμοποιώντας ένα Online Regex Tester.

      Επίσης, υπάρχουν σίγουρα πολλά περισσότερα που μπορούν να γίνουν εάν θέλετε να εξασφαλίσετε ένα διεύθυνση ηλεκτρονικού ταχυδρομείου ισχύει σύμφωνα με το RFC.

      Υπάρχουν μερικοί λόγοι για να μην επιτρέπεται σε κάποιον να εισάγει μια μη έγκυρη διεύθυνση email:
      1. Θα σας ενοχλήσουν όταν το email που περίμεναν να μην περάσει - ανεξάρτητα από το αν ήταν δικό σας λάθος η διεύθυνση εισήχθη λανθασμένα.
      2. Εάν το com.museum ήταν έγκυρος τομέας και, ας πούμε, Yahoo! το χρησιμοποίησε - οποιαδήποτε διεύθυνση ηλεκτρονικού ταχυδρομείου που αναπηδά θα έχει αρνητικό αντίκτυπο στη φήμη της εταιρείας σας για την παράδοση email. Αυτό θα μπορούσε να οδηγήσει στον αποκλεισμό όλων των email της εταιρείας σας.
      3. Εάν ο πάροχος υπηρεσιών email σας επέτρεπε να εισέλθετε bob@com.museum, θα πληρώνατε επίσης για κάθε μήνυμα ηλεκτρονικού ταχυδρομείου που αποστέλλεται σε αυτήν τη διεύθυνση ηλεκτρονικού ταχυδρομείου έως ότου καταργήσουν την εγγραφή αυτής της διεύθυνσης λόγω εγκατάλειψης. Θα απέφευγα κάθε ESP που θα επέτρεπε μια μη έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου έτσι - απλώς παίρνουν τα χρήματά σας!

      Ευχαριστώ που περάσατε!
      Doug

  4. 9
  5. 10

    Υπάρχει πολύ πιο απλός τρόπος για να γράψετε την έκφραση:
    var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
    - Με τον τελικό τροποποιητή / i δεν χρειάζεται να υποδείξετε το εύρος κεφαλαίων.
    - Δεν ξέρω τίποτα TLD με αριθμούς σε αυτό.
    Σε μια σημείωση, επιτρέπω TLD με έως και 6 χαρακτήρες. νέα έρχονται τακτικά και ποτέ δεν ξέρεις (καλά, μελλοντικά μπορεί να έχουν και αριθμούς σε αυτό, το ξέρω).

  6. 11

    Γεια σου,

    Πρόκειται να το χρησιμοποιήσω σε υπάρχουσα μορφή σε πραγματικό χρόνο, αλλά αυτό δεν φαίνεται να επικυρώνεται σε πραγματικό χρόνο, όπως ο ελεγκτής ισχύος κωδικού πρόσβασης…

    Ή, είμαι απλώς τόσο ανίδεος, και δεν λειτουργεί για μένα;

  7. 12

    btw, μου αρέσει πολύ αυτό που συμβαίνει εδώ, τα μαθήματά σας είναι πολύ απλά, σίγουρα θα σελιδοδείξω αυτό….

  8. 13
  9. 16

    Θα ήταν ωραία αν μπορούσαμε να βρούμε μια λύση για να αποφύγουμε ψεύτικες διευθύνσεις ηλεκτρονικού ταχυδρομείου σε σχόλια στο WordPress

  10. 17

    Απλώς μια μικρή διόρθωση: Η τυπική έκφραση έχει ένα επιπλέον () + στο τέλος. Πρέπει να διαβάζει:

    ^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+[a-zA-Z0-9]{2,4}$

    Με το πρώτο θα γινόταν αποδεκτό οποιοδήποτε TLD (το οποίο δεν είναι ενδογενώς λάθος, όπως έχουν επισημάνει και άλλοι, αλλά αν αυτή ήταν η πρόθεση, η έκφραση θα μπορούσε να συντομευθεί).

  11. 18

    Μπορείτε να εξηγήσετε την κανονική έκφραση αυτού του κώδικα και πώς λειτουργεί; Επίσης σχετικά με το .test - Είναι το .test μια προεπιλεγμένη δήλωση στο javascript για να ελέγξετε πράγματα όπως κάνατε στον παραπάνω κώδικα;

  12. 19
  13. 20

    Αυτός είναι ένας σύντομος κωδικός για την έκφραση email-

    συνάρτηση validateEmail (id)
    {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]
    επιστροφή emailPattern.test (id);

    }
    Ντεπκκ Ράι
    Varanasi

  14. 21
  15. 22
  16. 23

    Ευχαριστώ, αλλά υπάρχει ένα σφάλμα σε αυτό το regex. Δεν είμαι ειδικός στο regex, αλλά δοκίμασα το email:

    δοκιμή @ δοκιμή

    και πέρασε το regex… Παρατήρησα ότι λείπει να ξεφύγει από το "." οπότε πρέπει να είναι:

    /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/

  17. 24
  18. 27

    Λοιπόν, αυτός είναι ένας απλός έλεγχος αλλά όχι 100% ακριβής, για παράδειγμα αυτό θα ήταν εντάξει john_doe. @ gmail.com η οποία στην πραγματικότητα δεν είναι έγκυρη διεύθυνση e-mail (η τελεία δεν επιτρέπεται ως τελευταίος χαρακτήρας στο τοπικό τμήμα του e-mail).
    Επίσης θα δεχόταν john…doe@gmail.com το οποίο είναι επίσης άκυρο αφού δεν μπορεί να υπάρχουν περισσότερες από μία κουκκίδες σε μια ακολουθία.

    Αυτά είναι μερικά ελαττώματα που παρατήρησα με την πρώτη ματιά.
    Η πρόθεσή μου δεν είναι εντυπωσιακή μόνο για να το επισημάνω σε περίπτωση που κάποιος σχεδιάζει να το χρησιμοποιήσει ως έλεγχο ασφαλείας - δεν είναι αρκετά ασφαλές.

    Για πληροφορίες σχετικά με έγκυρες διευθύνσεις ηλεκτρονικού ταχυδρομείου, ελέγξτε το: http://en.wikipedia.org/wiki/E-mail_address

  19. 28

    Ντέπιπ,

    Στην πραγματικότητα, νομίζω ότι πρέπει να εφαρμόσετε μια διαφυγή για την τελεία ("."). Έτσι, η λειτουργία σας πρέπει να είναι, αντί:

    συνάρτηση validateEmail (id)
    {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]
    επιστροφή emailPattern.test (id);

    }

    Διαφορετικά, η τελεία θα σήμαινε «οποιονδήποτε χαρακτήρα». Πιστεύω ότι τέτοιοι ειδικοί χαρακτήρες πρέπει να ξεφύγουν.

    Χαιρετισμούς,

    Federico

  20. 29

    συνάρτηση validateEmail (fld) {
    var σφάλμα = "";
    var tfld = trim (fld.value); // τιμή πεδίου με κενό διάστημα
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),; \ "[]] /;

    if (fld.value == "Εισαγάγετε τη διεύθυνση email σας") {

    error = "Εισαγάγετε τη διεύθυνση email σας.n";
    } αλλιώς εάν (! emailFilter.test (tfld)) {// δοκιμάστε email για παράνομους χαρακτήρες

    error = "Εισαγάγετε μια έγκυρη διεύθυνση email.n";
    } αλλιώς εάν (fld.value.match (illegalChars)) {

    error = "Εισαγάγετε μια έγκυρη διεύθυνση email.n";
    }
    σφάλμα επιστροφής;
    }

  21. 30

    συνάρτηση validateEmail (fld) {
    var σφάλμα = "";
    var tfld = trim (fld.value); // τιμή πεδίου με κενό διάστημα
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),; \ "[]] /;

    if (fld.value == "Εισαγάγετε τη διεύθυνση email σας") {

    error = "Εισαγάγετε τη διεύθυνση email σας.n";
    } αλλιώς εάν (! emailFilter.test (tfld)) {// δοκιμάστε email για παράνομους χαρακτήρες

    error = "Εισαγάγετε μια έγκυρη διεύθυνση email.n";
    } αλλιώς εάν (fld.value.match (illegalChars)) {

    error = "Εισαγάγετε μια έγκυρη διεύθυνση email.n";
    }
    σφάλμα επιστροφής;
    }

  22. 31

    συνάρτηση validateEmail (fld) {
    var σφάλμα = "";
    var tfld = trim (fld.value); // τιμή πεδίου με κενό διάστημα
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),; \ "[]] /;

    if (fld.value == "Εισαγάγετε τη διεύθυνση email σας") {

    error = "Εισαγάγετε τη διεύθυνση email σας.n";
    } αλλιώς εάν (! emailFilter.test (tfld)) {// δοκιμάστε email για παράνομους χαρακτήρες

    error = "Εισαγάγετε μια έγκυρη διεύθυνση email.n";
    } αλλιώς εάν (fld.value.match (illegalChars)) {

    error = "Εισαγάγετε μια έγκυρη διεύθυνση email.n";
    }
    σφάλμα επιστροφής;
    }

  23. 32

    συνάρτηση validateEmail (fld) {
    var σφάλμα = "";
    var tfld = trim (fld.value); // τιμή πεδίου με κενό διάστημα
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),; \ "[]] /;

    if (fld.value == "Εισαγάγετε τη διεύθυνση email σας") {

    error = "Εισαγάγετε τη διεύθυνση email σας.n";
    } αλλιώς εάν (! emailFilter.test (tfld)) {// δοκιμάστε email για παράνομους χαρακτήρες

    error = "Εισαγάγετε μια έγκυρη διεύθυνση email.n";
    } αλλιώς εάν (fld.value.match (illegalChars)) {

    error = "Εισαγάγετε μια έγκυρη διεύθυνση email.n";
    }
    σφάλμα επιστροφής;
    }

  24. 33
  25. 34
  26. 35
  27. 36
  28. 37
  29. 38
  30. 39
  31. 40
    • 41

      Αλλά λειτουργεί μόνο με σύγχρονα προγράμματα περιήγησης. Δυστυχώς, ο κόσμος δεν έχει φτάσει ακόμα. -
      Εστάλη από το γραμματοκιβώτιο για iPhone

Ποια είναι η γνώμη σας;

Αυτός ο ιστότοπος χρησιμοποιεί το Akismet για να μειώσει το spam. Μάθετε πώς επεξεργάζονται τα δεδομένα των σχολίων σας.