jquery验证电子邮件不使用^字符

时间:2014-12-28 11:34:28

标签: jquery regex email-validation

我尝试按照此页Email validation using jQuery上的说明验证电子邮件,但我不知道为什么如果我在表达式的开头放置此字符^我会收到错误:

function checkEmail(){
    var email = this.innerHTML;
    var emailPattern = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z]{2,4})+$/;

    if (!emailPattern.test(email)){
        alert("Invalid email address.");
    }
    else {
        alert("Valid email address.");
    }
}

如果我使用另一个(没有^和+ $),它可以完美地运行:

var emailPattern = /[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}/;

只是理解它,我的第一个表达有什么问题?

这是一个演示我的问题的小提琴:http://jsfiddle.net/5en4cxy9/

谢谢,

1 个答案:

答案 0 :(得分:0)

您的小提琴包含电子邮件地址前的前导空格。此前导空格包含在.text().innerHTML中,因此锚定的正则表达式(/^.../)失败。

首先修剪前导/尾随空格:

var email = this.innerHTML.trim();
var emailPattern = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z]{2,4})+$/;

if (!emailPattern.test(email)){
    alert("Invalid email address.");
}
else {
    alert("Valid email address.");
}

$(document).ready(function() {
  $("div").blur(function() {
    // alert("This input field has lost its focus.");
    var email = $("div#email").text().trim();

    var emailPattern = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z]{2,4})+$/;

    if (!emailPattern.test(email)) {
      alert("Invalid email address.");
      $(this).css('color', 'red');
    } else {
      alert("Valid email address.");
    }


  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table id="myTable">
  <tbody>
    <tr class="tabel_header">
      <th width="10%" align="center"><strong> Email:</strong>
      </th>
      <th width="7%" align="center"><strong> Username:</strong>
      </th>
    </tr>
    <tr data-row-no="1" height="35">
      <td>
        <div id="email" style="width: 100%; height: 100%;" contenteditable="true"> admin@dracus.co</div>
      </td>
      <td>
        <div style="width: 100%; height: 100%;" contenteditable="true">Admin</div>
      </td>
    </tr>
  </tbody>
</table>