2012-04-04 84 views
1

我使用以下JavaScript代碼來驗證用戶輸入的電子郵件地址。我的問題是,我使用html5作爲'電子郵件'類型的文本框,目前在最新的IE版本上無法正常工作。我發現自己更喜歡html5,因爲它提供了更好的外觀和感覺效果。因此,我想用它,所以在同一時間將需要在一個小片段添加檢查IE瀏覽器,如下面的代碼,一個簡單的jquery片段來驗證用戶的電子郵件地址

function IsValidEmail(email) 
{ 
    var em= new RegExp(/^[+a-zA-Z0-9._-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i); 
    return em.test(email); 
} 
$("#aspformblahblah").submit(function() 
{ 
    var em=$('#email').val(); 
    if(!IsValidEmail(em)) 
    { 
     if($.browser.msie) 
     { 
      $("#e-valid").css({'color':'red','padding-left':'5px', 'font-style':'italic'}); 
      $("#e-valid").html("Please enter a valid email address"); 
      return false; 
     } 
    } 
    return true; 
}); 

它適用於所有其他瀏覽器不錯,但我的心似乎完全想到了一個邏輯錯誤,我正在沿着上述代碼在表單提交時上面的代碼不適用於IE的地方。不過,它很好地驗證了輸入的電子郵件地址。 任何想法請賜教....非常感謝,

+0

哦,我的天啊!我看到一個jquery標籤,只是爲了讓你知道jquery在validate插件中都需要驗證(文本,數字,電子郵件),可能你可以使用http://bassistance.de/jquery-plugins/jquery-plugin-驗證/ – Dhiraj 2012-04-04 04:43:35

+0

那麼你是說它的工作,或不?你有什麼問題? – nnnnnn 2012-04-04 04:45:59

+0

@userD,是的,我已經嘗試過了,它也可以工作,但現在我想重新使用html5提供的電子郵件輸入文本框的當前效果,並且只在使用瀏覽器時顯示一條消息的小代碼中添加IE和輸入的電子郵件地址不正確。 – 2012-04-04 04:47:56

回答

0

您正在傳遞一個正則表達式文字到RegExp()構造函數,但它期望一個字符串。試試這個:

function IsValidEmail(email) 
    { 
     var em= /^[+a-zA-Z0-9._-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i; 
     return em.test(email); 
    } 

注意,你不需要變量他們,如果你正在使用的「i」標誌的情況下,不區分大小寫的正則表達式,那麼你可以簡化您的模式:

return /^[+a-z0-9._-][email protected][a-z0-9.-]+\.[a-z]{2,4}$/i.test(email); 
+0

一旦我將文檔中的代碼包裝在文檔中,實際上仍然可以在我的IE中工作 – mplungjan 2012-04-04 06:44:04

+1

@mplungjan - 好點。這個問題太模糊了,我甚至都沒有想到。 – nnnnnn 2012-04-04 06:47:36

1

包裝在document.ready中

<!DOCTYPE HTML> 
<html> 
<head> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 
<script> 
function IsValidEmail(email) { 
    // the regex works in IE but should be a string (see nnnnn's answer) 
    // var em= new RegExp(/^[+a-zA-Z0-9._-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i); 
    var em=/^[+a-zA-Z0-9._-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i; // simpler 
    return em.test(email); 
} 
$(document).ready(function() { 
    $("#form1").submit(function() { 
    var em=$('#email').val(); 
    if(!IsValidEmail(em)) 
    { 
     if($.browser.msie) 
     { 
     alert("Wrong email"); 
      $("#e-valid").css({'color':'red','padding-left':'5px', 'font-style':'italic'}); 
      $("#e-valid").html("Please enter a valid email address"); 
      return false; 
     } 
    } 
    return true; 
    }); 
}); 

</script> 

</head> 
<body> 
<form id="form1"> 
<input id="email" type="email" value="" /><span id="e-valid"></span><br/> 
<input type="submit" /> 
</form> 
</body> 
</html>