簡體   English   中英

電子郵件驗證Javascript正則表達式

[英]Email Validation Javascript Regular Expression

晚上好,我正在創建一個正則表達式來驗證Javascript中的電子郵件地址。 我有這個功能,但我知道這個表達式可以寫得更好。 我怎么能改進它?

function checkEmailAddress(inputEmailAddy){
    var regex = new RegExp(\"^([A-Z][a-z][0-9][_][-][.])+\@([A-Z][a-z][0-9][_][-][.])+\.([A-Za-z]{2,4})$/\");

    return (regex.test(inputEmailAddy) == 1 ? 1 : -1);
}

謝謝,邁克

@符號左側的電子郵件的本地部分可以包含任何正確引用的內容,並且您無法使用正則表達式解釋引用 - 您必須根據RFC規則解析電子郵件地址,否則您拒絕一些有效的郵件地址。

即使正則表達式“足夠好”,您仍然需要發送確認電子郵件以驗證它是合法地址。

(這里提出的大多數答案已經被問到這個問題很多次都會失敗,並拒絕我的電子郵件地址,因為我有一個加號+我的地址)

這是一個示例代碼

<input type="text" id="email">
function test(){
var emailElement = document.getElementById('#email');
var emailPattern = /^[a-zA-Z]([a-zA-Z0-9_\-])+([\.][a-zA-Z0-9_]+)*\@((([a-zA-Z0-9\-])+\.){1,2})([a-zA-Z0-9]{2,40})$/;

if(!emailPattern(emailElement.value)){
    return false;
   } else {
    return true;
  }
}

我通常在PHP的eregi中使用這個(我知道它已被棄用):

'^[[:alnum:]][a-z0-9_\.\-]*@[a-z0-9\.\-]+\.[a-z]{2,4}$'

我很快就改成了它在JS中工作:

/^[a-z][a-z0-9_\.\-]*@[a-z0-9\.\-]+\.[a-z]{2,4}$/i

快速檢查:

var r = /^[a-z][a-z0-9_\.\-]*@[a-z0-9\.\-]+\.[a-z]{2,4}$/i;

r.test('someone@somesite.com'); // true
r.test('xyz@xyz.xyz'); // true
r.test('abc@3'); // false
r.test('xyz'); // false
r.test('asdf@asdf.asdfasdfasdf'); // false

一個問題是我在最后一部分使用{2,4} ,所以它匹配.net.com類的東西。 但它不會匹配像.museum這樣的有效類,而它會匹配像.xx這樣的不存在的.xx

現在,僅僅為lulz,我創建了一個與上面的類似的正則表達式,而不是[az]{2,4}我將其設置為匹配我所知道的每個有效域:

/^[a-z][a-z0-9_\.\-]*@[a-z0-9\.\-]+\.(?:aero|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xxx|ye|yt|za|zm|zw)$/i

給你:

r.test('someone@somesite.com'); // true
r.test('someone@somefakesite.xb'); // false
r.test('asdf'); // false
r.test('.museum'); // false
r.test('someone@somemuseumsite.museum'); // true

當然,這需要一個瘋狂的長期正則表達式(並且如果你希望它隨着時間的推移而保持不變)將必須保持。

此外,在所有這些情況下,一些有效(但非常罕見)的地址將失敗。 somebody@[192.168.2.1]

暫無
暫無

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

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