Ελέγξτε τη διεύθυνση ηλεκτρονικού ταχυδρομείου με 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

    For forms with multiple email addresses, it would be good to do class=”emailaddress”. If you have the prototype.js library (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. They will get annoyed at you when the email they expected doesn’t get through – regardless of whether or not it was your fault the address was entered incorrectly.
      2. If com.museum was a valid domain and, let’s say, Yahoo! operated it – any email address that bounced would have a negative impact on your company’s reputation for email delivery. This could lead to all of your company’s email being blocked.
      3. If your email service provider allowed you to enter bob@com.museum, you’d also pay for each email sent to that email address until they unsubscribed that address due to bounces. I would steer clear of any ESP that would allow an invalid email address like that – they’re just taking your money!

      Ευχαριστώ που περάσατε!
      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
  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); // value of field with whitespace trimmed off
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),; \ "[]] /;

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

    error = "Εισαγάγετε τη διεύθυνση email σας.n";
    } else if (!emailFilter.test(tfld)) { //test email for illegal characters

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

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

  21. 30

    συνάρτηση validateEmail (fld) {
    var σφάλμα = "";
    var tfld = trim(fld.value); // value of field with whitespace trimmed off
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),; \ "[]] /;

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

    error = "Εισαγάγετε τη διεύθυνση email σας.n";
    } else if (!emailFilter.test(tfld)) { //test email for illegal characters

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

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

  22. 31

    συνάρτηση validateEmail (fld) {
    var σφάλμα = "";
    var tfld = trim(fld.value); // value of field with whitespace trimmed off
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),; \ "[]] /;

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

    error = "Εισαγάγετε τη διεύθυνση email σας.n";
    } else if (!emailFilter.test(tfld)) { //test email for illegal characters

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

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

  23. 32

    συνάρτηση validateEmail (fld) {
    var σφάλμα = "";
    var tfld = trim(fld.value); // value of field with whitespace trimmed off
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),; \ "[]] /;

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

    error = "Εισαγάγετε τη διεύθυνση email σας.n";
    } else if (!emailFilter.test(tfld)) { //test email for illegal characters

    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. Μάθετε πώς επεξεργάζονται τα δεδομένα των σχολίων σας.