一个简单的jquery片段,用于验证用户的电子邮件地址

时间:2012-04-04 04:37:45

标签: javascript jquery html css html5

我使用以下javascript代码验证用户的输入电子邮件地址。我的问题是,我使用html5作为'email'类型的文本框,目前在最新的IE版本上不能正常工作。我发现自己更喜欢html5,因为它提供了更好的外观和感觉效果。因此,我想使用它,因此同时需要添加一个小片段来检查IE浏览器,如下面的代码所示,

    function IsValidEmail(email)
{
    var em= new RegExp(/^[+a-zA-Z0-9._-]+@[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的某个地方。但是,它可以很好地验证输入的电子邮件地址。 请任何启发我的想法....非常感谢,

2 个答案:

答案 0 :(得分: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._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i);
    var em=/^[+a-zA-Z0-9._-]+@[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>

答案 1 :(得分:0)

您正在将正则表达式文字传递给RegExp()构造函数,但它需要一个字符串。试试这个:

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

请注意,您不需要变量em,如果您对不区分大小写的正则表达式使用“i”标志,那么您可以简化模式:

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