我尝试按照此页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/
谢谢,
答案 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>