ตรวจสอบที่อยู่อีเมลโดยใช้ jQuery และ regex


174

ฉันก็ไม่แน่ใจเหมือนกันว่าจะทำอย่างไร ฉันต้องตรวจสอบที่อยู่อีเมลโดยใช้ regex กับสิ่งนี้:

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)

จากนั้นฉันต้องเรียกใช้งานนี้ในฟังก์ชัน jQuery ดังนี้:

$j("#fld_emailaddress").live('change',function() { 
var emailaddress = $j("#fld_emailaddress").val();

// validation here? 

if(emailaddress){}

// end validation

$j.ajax({  
        type: "POST",  
         url: "../ff-admin/ff-register/ff-user-check.php",  
        data: "fld_emailaddress="+ emailaddress,  
        success: function(msg)
        { 
            if(msg == 'OK') { 
            $j("#fld_username").attr('disabled',false); 
            $j("#fld_password").attr('disabled',false); 
            $j("#cmd_register_submit").attr('disabled',false); 
            $j("#fld_emailaddress").removeClass('object_error'); // if necessary
            $j("#fld_emailaddress").addClass("object_ok");
            $j('#email_ac').html('&nbsp;<img src="img/cool.png" align="absmiddle"> <font color="Green"> Your email <strong>'+ emailaddress+'</strong> is OK.</font>  ');
            } else {  
            $j("#fld_username").attr('disabled',true); 
            $j("#fld_password").attr('disabled',true); 
            $j("#cmd_register_submit").attr('disabled',true);  
            $j("#fld_emailaddress").removeClass('object_ok'); // if necessary
            $j("#fld_emailaddress").addClass("object_error");
            $j('#email_ac').html(msg);
            }
        }
     });
});

การตรวจสอบความถูกต้องไปที่ใดและการแสดงออกคืออะไร?


คำตอบ:


491

การปรับปรุง


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 */ }

2
ขอบคุณ aSeptik นอกเหนือจาก "หายไป" อีจาก mailAddress ทำงานได้ดีใช่รู้ว่าไม่มี regex 100% อยู่แล้ว แต่จะได้รับ "สวย" ปิด
RussP

1
ไม่ได้ตรวจสอบความลึกเกินไป แต่มันให้ผลบวกเป็นเท็จกับ asdf@adsf.com
gcb

@ gcb: สวัสดีถ้า regex ไม่ตรงกับความต้องการของคุณคุณสามารถเปลี่ยนได้แล้วฉันได้ทำการทดสอบแล้วและมันก็ใช้ได้ดี jsfiddle.net/ADPaM
Luca Filosofi

14
regex เพียงอย่างเดียวในฝั่งไคลเอนต์ไม่ทราบว่ามีเซิร์ฟเวอร์อีเมลหรือโดเมนนั้นมีอยู่จริง มันจะตรวจสอบว่าไวยากรณ์ของอีเมลใด ๆ ที่ถูกต้องหรือไม่ มันเท่านั้นที่จะช่วยให้ผู้ใช้เขียนที่อยู่ที่ถูกต้อง มันไม่ใช่การตรวจสอบ
BerggreenDK

ทำงานได้สมบูรณ์แบบ! ขอบคุณเพื่อน

28

นี่คือทางออกของฉัน:

function isValidEmailAddress(emailAddress) {
    var pattern = new RegExp(/^[+a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i);
    // alert( pattern.test(emailAddress) );
    return pattern.test(emailAddress);
};

พบว่า RegExp ตรงนี้: http://mdskinner.com/code/email-regex-and-validation-jquery


3
ประเด็นของคุณเกี่ยวกับเครื่องหมายบวกนั้นถูกต้อง แต่ regex ของคุณดีกว่าที่ฉันใช้ในตัวอย่าง ps: ฉันได้อัปเดต regex ของฉันเพื่อรองรับเครื่องหมายบวก
Luca Filosofi

เวลาส่วนใหญ่คุณเพียงต้องการตรวจสอบว่าผู้ใช้ป้อนอีเมลในรูปแบบที่ถูกต้อง ในการระบุความผิดพลาดเช่น "2" แทนที่จะเป็น "@" ดังนั้นฉันจึงชอบสิ่งนี้ดีกว่าคำตอบเดิม แต่คำตอบของ aeptik นั้นครอบคลุมและฉันก็โหวตขึ้นเช่นกัน
darwindeeds

test @ gmail..com มันบอกว่า vaild - ผิดเปลี่ยนนิพจน์ทั่วไป
htngapi

14
$(document).ready(function() {

$('#emailid').focusout(function(){

                $('#emailid').filter(function(){
                   var emil=$('#emailid').val();
              var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
            if( !emailReg.test( emil ) ) {
                alert('Please enter valid email');
                } else {
                alert('Thank you for your valid email');
                }
                })
            });
});

8
จริง ๆ แล้วนี่มีประโยชน์ ชื่อกล่าวว่า JQuery และนี่เป็นคำตอบเดียวที่มีตัวอย่าง jQuery ที่เหมาะสม
เทย์เลอร์มิทเชล

สิ่งนี้ตรวจสอบ abc.b. @ yahoo.com
NoBullMan

7

Lolz นี้ดีกว่ามาก

    function isValidEmailAddress(emailAddress) {
        var pattern = new RegExp(/^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/);
        return pattern.test(emailAddress);
    };

ฉันชอบโซลูชันของคุณสำหรับเว็บไซต์บนมือถือ อีกอันจะทำให้สมาร์ทโฟนของฉันละลาย;) +1
Hexodus

ปัญหาเกี่ยวกับไวยากรณ์ของ oin javascript
Sajith

มันจะไม่ตรวจสอบตัวอักษรäüõ ฯลฯ !!
DAH

5

ผมจะแนะนำให้คุณใช้ปลั๊กอิน jQueryสำหรับVerimail.js

ทำไม?

  • การตรวจสอบ IANA TLD
  • การตรวจสอบความถูกต้องของไวยากรณ์ (ตาม RFC 822)
  • ข้อเสนอแนะการสะกดสำหรับ TLD และโดเมนอีเมลทั่วไป
  • ปฏิเสธโดเมนบัญชีอีเมลชั่วคราวเช่น mailinator.com

อย่างไร?

ประกอบด้วย verimail.jquery.jsบนไซต์ของคุณและใช้ฟังก์ชัน:

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

หากคุณมีแบบฟอร์มและต้องการตรวจสอบความถูกต้องของอีเมลเมื่อส่งคุณสามารถใช้ฟังก์ชัน getVerimailStatus-function:

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

1
Verimail ทำการตรวจสอบความถูกต้องของ keyup ซึ่งหมายความว่าทันทีที่คุณเริ่มพิมพ์คุณจะได้รับข้อความแสดงข้อผิดพลาด โดยทั่วไปแล้วปลั๊กอินที่ดี แต่อันนี้เป็นตัวจัดการข้อตกลง - ฉันต้องการตรวจสอบเฉพาะเมื่อถูกเรียกด้วยตนเองเช่นก่อนที่จะคลิกปุ่มส่งหรือออกจากสนาม
เซบาสเตียนชมิด


0

นอกจากนี้เรายังสามารถใช้การแสดงออกปกติ (/^(ه\w.-สามสิบ+)@(ه\w-เหมือน+)((.wcw){2,3})+)$//) เพื่อตรวจสอบที่อยู่อีเมล รูปแบบถูกต้องหรือไม่

var emailRegex = new RegExp(/^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$/i);
 var valid = emailRegex.test(emailAddress);
  if (!valid) {
    alert("Invalid e-mail address");
    return false;
  } else
    return true;

0

ลองสิ่งนี้

function isValidEmailAddress(emailAddress) {
    var pattern = new RegExp(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/);
    return pattern.test(emailAddress);
};

0

คุณสามารถใช้ฟังก์ชั่นนี้

 var validateEmail = function (email) {

        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;


        if (pattern.test(email)) {
            return true;
        }
        else {
            return false;
        }
    };

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.