如何在表单中只接受两种电子邮件域?
How to only accept two kinds of email domain in form?
我有一个表单,其中一个输入字段要求用户输入他们的电子邮件。但是,我只想接受@gmail.com 和@outlook.com 但我的代码似乎只接受@outlook.com。谁能对我的代码提出一些建议?
$( "#email" ).change(function() {
if (this.value.length <= 0 ) {
email=0;
$(this).removeClass( 'success_class' );
$(this).addClass( 'error_class' );
document.getElementById("emailError").innerHTML = "You need to enter your email";
} else if (this.value.length > 200) {
email=0;
$(this).removeClass( 'success_class' );
$(this).addClass( 'error_class' );
document.getElementById("emailError").innerHTML = "The email is too big.";
} else if ((this.value.search('@outlook.com') == -1 || this.value.search('@gmail.com') == -1) || (this.value.length != this.value.search('@outlook.com')+12 ||this.value.length != this.value.search('@gmail.com')+10)) {
email=0;
$(this).removeClass( 'success_class' );
$(this).addClass( 'error_class' );
document.getElementById("emailError").innerHTML = "You must enter your Gmail or Outlook email";
} else {
email=1;
$(this).removeClass( 'error_class' );
$(this).addClass( 'success_class' );
document.getElementById("emailError").innerHTML = "";
}
});
使用正则表达式 /\@(gmail|outlook){1}\.com$/i
->
- \@ 应包含 @
- (gmail|outlook) 必须只出现一次 gmail 或 outlook
- .com$ .com 和结束
- i -> 标记不区分大小写
$( "#email" ).change(function() {
if (this.value.length <= 0 ) {
email=0;
$(this).removeClass( 'success_class' );
$(this).addClass( 'error_class' );
document.getElementById("emailError").innerHTML = "You need to enter your email";
} else if (this.value.length > 200) {
email=0;
$(this).removeClass( 'success_class' );
$(this).addClass( 'error_class' );
document.getElementById("emailError").innerHTML = "The email is too big.";
} else if (!/\@(gmail|outlook)\.com$/i.test(this.value)) {
email=0;
$(this).removeClass( 'success_class' );
$(this).addClass( 'error_class' );
document.getElementById("emailError").innerHTML = "You must enter your Gmail or Outlook email";
} else {
email=1;
$(this).removeClass( 'error_class' );
$(this).addClass( 'success_class' );
document.getElementById("emailError").innerHTML = "";
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="email" name="email" type="email" />
<div id="emailError"></div>
发生这种情况是因为您检查这些域的方式。看这一行:
else if ((this.value.search('@outlook.com') == -1 || this.value.search('@gmail.com') == -1)
让我们看看当有人输入“@gmail.com”时会发生什么。第一个条件检查是否缺少“@outlook.com” returns 为真,并且输入代码块,而不检查“@gmail.com”。所以它似乎不起作用。
解决此问题的几种方法:
1) 使用肯定的搜索结果而不是否定的。
if(this.value.search('@outlook.com') > -1 || this.value.search('@gmail.com') > -1) {
// code for correctly entered email
}
2) 使用正则表达式。根据 Sagar V 的回答,一个很好用的是:
/\@(gmail|outlook)\.com$/i
3) 使用 select 框强制用户选择一个域。在我看来,这并不好 UI/UX,因为用户可能不熟悉这样输入电子邮件,并且可能无论如何都会将其全部输入到您的输入中。
我更喜欢正则表达式,因为当您理解它的作用时,它更容易理解。
我有一个表单,其中一个输入字段要求用户输入他们的电子邮件。但是,我只想接受@gmail.com 和@outlook.com 但我的代码似乎只接受@outlook.com。谁能对我的代码提出一些建议?
$( "#email" ).change(function() {
if (this.value.length <= 0 ) {
email=0;
$(this).removeClass( 'success_class' );
$(this).addClass( 'error_class' );
document.getElementById("emailError").innerHTML = "You need to enter your email";
} else if (this.value.length > 200) {
email=0;
$(this).removeClass( 'success_class' );
$(this).addClass( 'error_class' );
document.getElementById("emailError").innerHTML = "The email is too big.";
} else if ((this.value.search('@outlook.com') == -1 || this.value.search('@gmail.com') == -1) || (this.value.length != this.value.search('@outlook.com')+12 ||this.value.length != this.value.search('@gmail.com')+10)) {
email=0;
$(this).removeClass( 'success_class' );
$(this).addClass( 'error_class' );
document.getElementById("emailError").innerHTML = "You must enter your Gmail or Outlook email";
} else {
email=1;
$(this).removeClass( 'error_class' );
$(this).addClass( 'success_class' );
document.getElementById("emailError").innerHTML = "";
}
});
使用正则表达式 /\@(gmail|outlook){1}\.com$/i
->
- \@ 应包含 @
- (gmail|outlook) 必须只出现一次 gmail 或 outlook
- .com$ .com 和结束
- i -> 标记不区分大小写
$( "#email" ).change(function() {
if (this.value.length <= 0 ) {
email=0;
$(this).removeClass( 'success_class' );
$(this).addClass( 'error_class' );
document.getElementById("emailError").innerHTML = "You need to enter your email";
} else if (this.value.length > 200) {
email=0;
$(this).removeClass( 'success_class' );
$(this).addClass( 'error_class' );
document.getElementById("emailError").innerHTML = "The email is too big.";
} else if (!/\@(gmail|outlook)\.com$/i.test(this.value)) {
email=0;
$(this).removeClass( 'success_class' );
$(this).addClass( 'error_class' );
document.getElementById("emailError").innerHTML = "You must enter your Gmail or Outlook email";
} else {
email=1;
$(this).removeClass( 'error_class' );
$(this).addClass( 'success_class' );
document.getElementById("emailError").innerHTML = "";
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="email" name="email" type="email" />
<div id="emailError"></div>
发生这种情况是因为您检查这些域的方式。看这一行:
else if ((this.value.search('@outlook.com') == -1 || this.value.search('@gmail.com') == -1)
让我们看看当有人输入“@gmail.com”时会发生什么。第一个条件检查是否缺少“@outlook.com” returns 为真,并且输入代码块,而不检查“@gmail.com”。所以它似乎不起作用。
解决此问题的几种方法:
1) 使用肯定的搜索结果而不是否定的。
if(this.value.search('@outlook.com') > -1 || this.value.search('@gmail.com') > -1) {
// code for correctly entered email
}
2) 使用正则表达式。根据 Sagar V 的回答,一个很好用的是:
/\@(gmail|outlook)\.com$/i
3) 使用 select 框强制用户选择一个域。在我看来,这并不好 UI/UX,因为用户可能不熟悉这样输入电子邮件,并且可能无论如何都会将其全部输入到您的输入中。
我更喜欢正则表达式,因为当您理解它的作用时,它更容易理解。