Câu hỏi Xác thực email biểu thức chính quy JavaScript [trùng lặp]


Câu hỏi này đã có câu trả lời ở đây:

Mã này luôn cảnh báo "null", có nghĩa là chuỗi không khớp với biểu thức.

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


gốc


Xác thực email là khó. Thực tế bạn chỉ có thể giả sử nó chứa một @ và rằng có ít nhất một. sau @ một nơi nào đó nhưng thats về nó thực sự nếu bạn muốn tránh xa lánh ít nhất một số người dùng của bạn. Trừ khi bạn đang xác thực cho một miền cụ thể nơi chính sách đặt tên email được cấu trúc nhiều hơn. - AnthonyWJones
Nói đúng ra bạn thậm chí không thể giả định có một. một vài nơi. Xem ví dụ ua ccTLD, có bản ghi MX ở cấp cao nhất. - Ian
Tại sao bạn không thể sử dụng loại = "email" trong biểu mẫu? @azamsharp - PT_C


Các câu trả lời:


Nếu bạn xác định cụm từ thông dụng của mình dưới dạng chuỗi thì tất cả dấu gạch chéo ngược cần phải được thoát, vì vậy thay vì '\ w', bạn nên có '\\ w'.

Ngoài ra, xác định nó như là một biểu thức chính quy:

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

BTW, vui lòng không xác thực địa chỉ email ở phía máy khách. Biểu thức chính quy của bạn là quá đơn giản để vượt qua cho một thực hiện vững chắc anyway.

Xem điều thực sự ở đây: http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html


61
2018-06-02 16:45



Cụm từ thông dụng này không hỗ trợ các địa chỉ như john.smith@gmail.com - Nadia Alramli
nó không hỗ trợ email như emailadd@gmail.com.sa - Amr Badawy
Tại sao các địa chỉ email không được xác thực phía khách hàng? Chắc chắn đó là hình thức xác thực của khách hàng nhanh hơn nhiều, vì chúng tôi không cần phải thực hiện nhiều yêu cầu HTTP trên mạng để xác thực dữ liệu? (đặc biệt quan trọng đối với các ứng dụng dành cho thiết bị di động có thể liên hệ với máy chủ qua Wi-Fi hoặc mạng di động chậm). - Ciaran Gallagher
Biểu thức này để lại toàn bộ rất nhiều điều mong muốn: 1) không cho phép nhiều ký tự tên người dùng hợp lệ như dấu gạch ngang và dấu cộng; 2) không cho phép các tên miền có nhiều hơn 2 phần, được tìm thấy trong nhiều ccTLD, chẳng hạn như geek.co.il; 3) không cho phép nhiều TLD mới sử dụng 4 ký tự trở lên, chẳng hạn như mobi và info; 4) không hỗ trợ IDN. - Guss
@CiaranGallagher, bạn nói đúng về hiệu suất. Tuy nhiên, từ quan điểm bảo mật, JS phía máy khách sẽ không bảo vệ bạn khỏi XSS, SQL injection hoặc các lỗ hổng khác. IMHO, tốt nhất bạn nên thực hiện một số xác thực cơ bản ở giao diện người dùng để người dùng không mất dữ liệu mà họ đã nhập (EX: kiểm tra các trường trống, xác thực số điện thoại hoặc SSN). Tuy nhiên, bạn nên luôn bảo mật ứng dụng của mình bằng mã vệ sinh có chất lượng cao mã nguồn mở trên máy chủ. - Rustavore


đây là cái tôi đang sử dụng trên trang của tôi.

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



Không hỗ trợ địa chỉ '+', tức là "user+label@gmail.com". - Jolly Roger
Điều này sẽ thất bại đối với một số các tên miền mới - GP89
Thực hiện tốt và cảm ơn. Đây là một trong những cái tốt hơn tôi đã thấy. - RushVan
Điều này cũng không hợp lệ. Xem danh sách các tên miền cấp cao nhất iana.org/domains/root/db - Daniel


Tôi đã sử dụng chức năng này một lúc. nó trả về một giá trị boolean.

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



Tôi biết đây là cũ, nhưng điều này có thể được đơn giản hóa thành: return String (e) .match (/ ^ \ s * [\ w \ - \ + _] + (?: \. [\ W \ - \ + _] +) * \ @ [\ w \ - \ + _] + \. [\ w \ - \ + _] + (?: \. [\ w \ - \ + _] +) * \ s * $ /) ; Nó sẽ trả về null nếu không có kết quả phù hợp và một mảng đơn của chính địa chỉ email nếu nó khớp với nhau. - Andir
Tôi nghĩ rằng regex của bạn không xác nhận, giả sử, nicolas. @ Gmail.com ... Đây có phải là RFC822 tuân thủ không? Tôi không chắc. Bất kỳ ai để xác nhận? - nembleton
Nó cho aaa-------@gmail.com là true - Imran


Bạn có thể quan tâm câu hỏi này (hoặc là cái này), làm nổi bật thực tế là việc xác định địa chỉ email hợp lệ qua regexps là một vấn đề rất khó giải quyết (nếu có thể giải quyết được)


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



theo điều này test@test.info không phải là một email - tborychowski


đơn giản hơn

Đây là:

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")

}

chúc may mắn.


7
2017-12-06 14:12



tại thời điểm viết bài này, điều này làm việc tốt .... chúng ta hãy hy vọng nó vẫn như vậy như tôi đã được thông qua khá một vài trong số này;) - Andrew Odendaal
HUEI90@gmail.com' sẽ chuyển mẫu này, nhưng thêm ^ => /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/ có thể khắc phục sự cố - Huei Tan


Đôi khi, hầu hết trang đăng ký và đăng nhập cần xác thực email. Trong ví dụ này, bạn sẽ tìm hiểu xác thực email đơn giản. Đầu tiên lấy một đầu vào văn bản trong html và một nút đầu vào như thế này

<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>

bạn cũng có thể kiểm tra bằng cách sử dụng cụm từ thông dụng này

<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>

Kiểm tra đầu ra demo này mà bạn có thể kiểm tra ở đây

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();'/>

nếu email không hợp lệ thì hãy thông báo cảnh báo, nếu email hợp lệ thì không có thông báo cảnh báo. để biết thêm thông tin về biểu thức chính quy

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

hy vọng nó sẽ giúp bạn


7
2017-09-23 17:07



Điểm của {2,4} nếu bạn có một + sau đó? - developerbmw
sau đó nó sẽ hiển thị email không hợp lệ, bạn có thể cho tôi địa chỉ email mẫu không? - Shafiqul Islam


Bạn có thể quan tâm đến việc xem xét điều này trang nó liệt kê các biểu thức chính quy để xác thực địa chỉ email bao gồm các trường hợp tổng quát hơn.


5
2018-06-02 16:49





Xác nhận email dễ bị sai. Do đó, tôi khuyên bạn nên sử dụng Verimail.js.

Tại sao?

  • Xác thực cú pháp (theo RFC 822).
  • Xác nhận IANA TLD
  • Đề xuất chính tả cho các tên miền TLD và email phổ biến nhất
  • Từ chối các miền tài khoản email tạm thời như mailinator.com
  • Hỗ trợ plugin jQuery

Một điều tuyệt vời nữa với Verimail.js là nó có đề xuất chính tả cho các miền email phổ biến nhất và các TLD được đăng ký. Điều này có thể làm giảm tỷ lệ số trang không truy cập của bạn một cách đáng kể cho những người dùng viết sai chính tả các tên miền phổ biến như gmail.com, hotmail.com, aol.com, aso ..

Thí dụ:

  • test@gnail.com -> Ý của bạn là test@gmail.com?
  • test@hottmail.con -> Ý của bạn là test@hotmail.com?

Làm thế nào để sử dụng nó?

Cách dễ nhất là tải xuống và bao gồm verimail.jquery.js trên trang của bạn. Sau đó, hookup Verimail bằng cách chạy hàm sau trên hộp nhập liệu cần xác thực:

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

Phần tử thư là một phần tử tùy chọn hiển thị thông báo như "Email không hợp lệ .." hoặc "Ý của bạn là test@gmail.com?". Nếu bạn có một biểu mẫu và chỉ muốn tiếp tục nếu email được xác minh, bạn có thể sử dụng hàm getVerimailStatus như hình dưới đây:

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

Hàm getVerimailStatus trả về một mã số nguyên theo đối tượng Comfirm.AlphaMail.Verimail.Status. Như được hiển thị ở trên, nếu trạng thái là giá trị số nguyên âm thì xác thực sẽ được coi là lỗi. Nhưng nếu giá trị lớn hơn hoặc bằng 0, thì xác thực sẽ được coi là thành công.


5
2017-10-09 16:17





Tôi đã sử dụng cái này ....

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

Nó cho phép + trước @  (xyz+abc@xyz.com)


3
2017-12-28 06:27



Đây là mô hình duy nhất ở đây, thực sự hoạt động !! - tborychowski
Không, có nhiều tên miền dài hơn 6 ký tự, như .software ví dụ. - emix