簡體   English   中英

使用 JavaScript 進行超級簡單的電子郵件驗證

[英]Super simple email validation with JavaScript

我正在制作一個非常簡單的電子郵件驗證腳本,基本上只檢查以下內容

  1. 電子郵件不是空白的
  2. 電子郵件包含一個 @ 符號,前面至少有 1 個字符
  3. 有一個域,即 @ 后面至少有 2 個字母
  4. 它以句號結尾,后面至少有 2 個字母

我知道還有更多檢查,但我查看了這些正則表達式規則,我的大腦停止了工作。 我想如果我從像這樣的小東西開始,我可能能夠將我的大腦包裹在更復雜的規則上。

目前使用一些 jQuery 我執行以下操作:

 var booking_email = $('input[name=booking_email]').val();

 if(booking_email == '' || booking_email.indexOf('@') == -1 || booking_email.indexOf('.') == -1) {

   // perform my alert

 }

到目前為止,這足以阻止 90% 的虛假電子郵件......我只想讓它更有效一些,因為目前我的規則將允許像“@example.com”或“ user@domain ”這樣的電子郵件。 因為它只檢查是否有句號和@ 符號。

其他人的建議應該可以正常工作,但是如果您想保持簡單,請嘗試以下操作:

var booking_email = $('input[name=booking_email]').val();

if( /(.+)@(.+){2,}\.(.+){2,}/.test(booking_email) ){
  // valid email
} else {
  // invalid email
}

即使您決定使用更健壯的東西,它也應該可以幫助您了解正則表達式有時是多么簡單。 :)

你做的最不可能的貪婪驗證是使用這個正則表達式/^\S+@\S+\.\S+$/

它只會確保地址符合您提到的最基本要求:@ 之前的字符以及域部分中點之前和之后的內容( \S表示“除空格之外的任何內容”)。 驗證更多可能是錯誤的(您總是有機會將有效電子郵件列入黑名單)。

像這樣使用它:

function maybeValidEmail (email) { return /^\S+@\S+\.\S+$/.test(email); }

嘗試:

function valid_email(email) {
   return email.match(/^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i);
}

根據這篇文章,這是最好的電子郵件驗證正則表達式 我建議使用它,除非您的目標非常簡單但不完全兼容。

RegexLib.com ( http://regexlib.com/Search.aspx?k=email ) 有數百個電子郵件驗證例程是有原因的。 我建議您閱讀這篇文章: http ://www.unwrongest.com/blog/email-validation-regular-expressions/ 如果您決定繼續使用正則表達式進行驗證,我最喜歡的測試工具是免費的正則表達式設計器在這里免費: http ://www.radsoftware.com.au/regexdesigner/ ...測試大列表中的所有電子郵件(可免費下載或購買...或使用您自己的當前數據庫)以確保您的正則表達式在您的限制范圍內可以接受。

我會推薦一個基本測試(很多都在 regexlib.com 的頂部......我不認為我經常使用他們的工作),然后是一個需要用戶交互的電子郵件驗證例程。 這是“驗證”電子郵件地址的唯一真正方法。

電子郵件很難測試,但您可以進行一些限制性但簡單的電子郵件驗證。 我自己使用這個,它在確保 95% 是電子郵件地址方面做得相當不錯。

var simpleValidEmail = function( email ) {
    return email.length < 256 && /^[^@]+@[^@]{2,}\.[^@]{2,}$/.test(email);
};

我建議將此用於“簡單”驗證。

要了解為什么這很難解決,請參閱: 如何使用正則表達式驗證電子郵件地址?

更新:更正正則表達式

根據Ian Christian Myers在此之前的回復,此答案添加了 + 符號並擴展到 4 個以上字符的 tld

function validateEmail(email) {
    const regex = /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,15}$/;
    return regex.test(email);
}

npm 上的is-email非常簡單,如果有點松散,只需:

var matcher = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;

function isEmail(string) {
  return matcher.test(string);
}

它是由處理大量電子郵件的 segment.io 編寫的。

 <input type="email" name="email" required>

我猜這應該可行。

type = email 將檢查基本驗證, required 將檢查該字段是否為空白。

你可以試試這個:

var booking_email = $('input[name=booking_email]').val();
if(booking_email.match(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/)) {
  // valid email
} else {
  // not valid
}

如果您只想檢查企業電子郵件,請嘗試以下操作:

<script type="text/javascript">
$(document).ready(function(e){
     $('#sendReq').click(function(){ 
     var email = $('#emailAddress').val();
     var reg = /^([\w-\.]+@(?!gmail.com)(?!yahoo.com)(?!hotmail.com)(?!yahoo.co.in)(?!aol.com)(?!abc.com)(?!xyz.com)(?!pqr.com)(?!rediffmail.com)(?!live.com)(?!outlook.com)(?!me.com)(?!msn.com)(?!ymail.com)([\w-]+\.)+[\w-]{2,4})?$/;
      if (reg.test(email)){
     return 0;
     }
     else{
     alert('Please Enter Business Email Address');
     return false;
     }
     });
    });
</script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM