我正在尝试在Javascript中编写一个函数来验证电子邮件地址。这是功能。
function validateEmailAddress() {
var patternForEmail = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})$/;
var regexPatternForEmail = new RegExp(patternForEmail, 'i');
// Email address and the Confirm Email address values should match
if ($('#txtEmail').val() != $('#txtConfirmEmail').val()) {
$('#dvErrorMsg').html("Email addresses do not match.");
$('#txtEmail').focus();
return false;
}
else if (!regexPatternForEmail.test($('#txtEmail').val())) {
$('#dvErrorMsg').html("Please enter a valid email address.");
$('#txtEmail').focus();
return false;
}
else
return true;
}
这里的问题是我在RegExp对象实例化过程中遇到错误,“正则表达式中的语法错误”。
我在IE 11中尝试过调试,这就是我发现错误的地方。 有人可以建议我解决这个问题。
调试时拍摄的屏幕截图:
答案 0 :(得分:2)
您不需要使用RegExp
构造函数创建另一个正则表达式变量。只需使用以下内容。
var patternForEmail = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})$/i;
最后一个不区分大小写的修饰符 i
,它有助于进行不区分大小写的匹配。
示例:强>
> var patternForEmail = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})$/i;
> patternForEmail.test('foo@bar.com')
true
> patternForEmail.test('@foo@bar.com')
false
答案 1 :(得分:0)
在大多数情况下,由于浏览器兼容性而发生此类错误,因此我们始终需要使用可在所有浏览器中运行的代码。我希望以下更改对您有所帮助。
var patternForEmail = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
然后你可以使用
匹配表达式if (patternForEmail.test($('#txtEmail').val())) {
$('#dvErrorMsg').html("Please enter a valid email address.");
$('#txtEmail').focus();
return false;
}
或者您也可以使用 match()功能,这对所有浏览器都会更灵活。
var email = $('#txtEmail').val();
if (!email.match(/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i)) {
$('#dvErrorMsg').html("Please enter a valid email address.");
$('#txtEmail').focus();
return false;
}