1

次の JavaScript コードを使用して、ユーザーからの入力メール アドレスを検証しています。私の問題は、「メール」タイプのテキストボックスに html5 を使用していて、現時点では最新の 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 で動作しないという論理的な間違いを考えるのに頭がいっぱいのようです。ただし、入力されたメールアドレスは十分に検証されます。私を啓発するための任意のアイデアをお願いします....どうもありがとうございました,

4

2 に答える 2

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>
于 2012-04-04T06:41:33.850 に答える
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);
于 2012-04-04T06:35:38.190 に答える