Javascript 如何验证电子邮件地址与网站域的匹配?
我的表单上有两个输入字段:电子邮件和网站 如何使用JQuery验证电子邮件地址域必须与网站域匹配 例如:如果网站是或有www,或没有http://或没有。 然后,电子邮件地址字段必须为user@example.com 这是我的表格Javascript 如何验证电子邮件地址与网站域的匹配?,javascript,jquery,regex,validation,Javascript,Jquery,Regex,Validation,我的表单上有两个输入字段:电子邮件和网站 如何使用JQuery验证电子邮件地址域必须与网站域匹配 例如:如果网站是或有www,或没有http://或没有。 然后,电子邮件地址字段必须为user@example.com 这是我的表格 我已经添加了Wiktor建议的正则表达式,只做了一个小改动,即接受不带协议的url 您的代码如下所示: $(document).ready(function(){ $("#target").submit(function(event) { va
我已经添加了Wiktor建议的正则表达式,只做了一个小改动,即接受不带协议的url 您的代码如下所示:
$(document).ready(function(){
$("#target").submit(function(event) {
var website = $("#website").val();
var websiteDomain = website.replace(/^(https?:\/\/)?(?:www\.)?/, "");
var email = $("#email").val();
var emailDomain = email.substr(email.indexOf("@")+1);
$("span").text(websiteDomain === emailDomain ? "Valid!" : "Not valid!" ).show()
event.preventDefault();
});
});
您可以通过以下方式使用URL正则表达式:
只获取域名的最后两部分是可选的,如果您想将ww2.mobile.gmail.com
转换为gmail.com
,可以使用它。正如@samanime所指出的,这种逻辑将影响像.co.in
这样的域名
var parse\u url=/^(?:([A-Za-z]+):)(\/{0,3})([0-9.\-A-Za-z]+)((?:(\d+))(?:/([^?#]*)(?:\([^#]*)(?:(*))(?:(?:。);
var url='www.mobile.ora.co.in:80/goodparts?q#fragment';
var result=parse_url.exec(url);
var hostName=result[3];
log(“主机名:”,主机名);
lastwo=hostName.split('.');
lastwo=lastwo.length>2?lastwo.slice(Math.max(lastwo.length-2,1)):lastwo;
onlyMainDomain=lastwo.join('.');
log('only main domain:',only maindomain);
var电子邮件=”someone@ora.co.in";
var emailDomain=email.split('@')[1];
log('email-domain:',emailDomain);
log(“有效?”,emailDomain==onlyMainDomain);
//检查电子邮件域是否是主机名的子级
emailDomainRev=emailDomain.split('.').reverse();
hostNameRev=hostName.split('.').reverse();
var emailDomainIsChildOfHostName=true;
如果(emailDomainRev.length>hostNameRev.length){
emailDomainIsChildOfHostName=false;
}
否则{
emailDomainIsChildOfHostName=emailDomainRev.reduce(函数(附件、项目、索引){
返回acc&(item==hostNameRev[index]);
},对);
}
log(“电子邮件域是主机名:”,emailDomainIsChildOfHostName)的子级)代码>你的问题有一个棘手的部分。从技术上讲,您可以拥有一个包含任意数量部分的域。例如:this.is.a.valid.domain.com
有了新的自定义顶级域,它可能会变得更加棘手,因为它们使拥有各种疯狂的组合和长度成为可能。例如:this.is.a.valid.name.on.the.top.level.cake
看起来一点也不像一个域,但是如果您拥有顶级域cake
,您就可以实现它
因此,您无法真正删除子域并确保www.example.com
生成电子邮件@example.com
。但是,您可以判断它是否至少在@www.example.com
、@example.com
或@com
上,这可能都是有效的。(实际上,在任何受控制的顶级域上都不可能有一个,但对于那些罕见的情况,允许它可能是件好事。)
这就是为什么大多数网站要求你点击发送给你的电子邮件中的链接来验证你的URL
使用我刚才描述的上述标准,您可以这样做:
var website = "http://www.example.com"; // website from form
var email = "me@example.com"; // email from form
var emailDomain = email.split('@')[1];
var websiteDomain = website.match(/^(?:https?:\/\/)?([^\/]+)/)[1];
var isValidEmail = (websiteDomain || '').lastIndexOf(emailDomain) === (websiteDomain || '').length - (emailDomain || '').length;
isValidEmail
如果是有效匹配,则将包含true
;如果不是,则包含false
我已经添加了一些检查,如果上面的某个部分出现故障,那么它不会抛出错误。如果您提供的网站无效,websiteDomain
将未定义
。同样,对于完全无效的电子邮件,emailDomain
将“未定义”。我将更新您的代码。我给你这里的链接
下面是一个简单的JavaScript过程,用于验证带有域名的电子邮件。
function ValidateEmail(email) {
var re = /\S+@\S+\.\S+/; /*Regular expression for valid email*/
return re.test(email); /*Return `true` if valid, Otherwise return `false`*/
}
var domain = 'www.example@example.com';
var email ='emaxple@example.com';
if(ValidateEmail(email)){
email = email.split('@'); /* Split email after `@` Sign*/
email = email[1] /*After split, `email[0]=emaxple, email[1]=emaxple.com`*/
domain = domain.split('').reverse().join(''); /*Now `domain = moc.elpmaxe@elpmaxe.www`*/
email = email.split('').reverse().join(''); /*Now `email = moc.elpmaxe*/
email = email + '@'; /*Now `email = moc.elpmaxe@`*/
if(domain.indexOf(email)==0){ /*If only return `0` then valid, Otherwise Invalid*/
/*Valid with your domain*/
}else{
/*Doesn't match with your domain*/
}
}else{
/*Invalid Email*/
}
在比较之前,请尝试从URL中删除protcol和www,例如,您可以在这个问题中找到正确答案@YolloPain:这个问题没有答案。如果URL是http://mysubdomain1.mysubdomain2.mydomain.name
?您假设只有电子邮件的最后两位有效。这对example.co.jp这样的东西不起作用,从技术上讲,你也可以从子域发送电子邮件,比如me@sub.example.com
。是的,没错。我想知道所有的要求是什么!无论如何,完整的域名是可以从那里得到的,他可以用
进行拆分,并根据自己的意愿进行处理。谢谢,在所有的解决方案中,这一个是最好的,并且适用于我的情况。@delphiman我已经添加了一个解决方案来检查电子邮件域名是否是主机名的子域名,它还包括.co.in
的域。如果主机名是www.mobile.gmail.com
,电子邮件是x@gmail.com
或x@mobile.gmail.com“主运行中心。elpmaxe@elpmaxe.www“.indexOf('moc.el')===0
,您必须在
处进行拆分,并对每个进行比较。现在,我用电子邮件=电子邮件+'@'更新了我的代码代码>,因此,现在不再重复组合。谢谢@SabithPocker如果我进入这样一个域名,电子邮件也是这样的话,它就不会工作了user@example.com
$(document).ready(function(){
$( "#target" ).submit(function(event) {
event.preventDefault();
var emailString = $("#email").val();
//cut rule by @
var afterAt = emailString.split('@');
var val = $("#website").val();
var myString = val.substr(-(afterAt[1].length));
console.log(afterAt[1].length);
if (myString == afterAt[1]){
console.log('works');return
}else{
console.log('not');return
};
});
});
function ValidateEmail(email) {
var re = /\S+@\S+\.\S+/; /*Regular expression for valid email*/
return re.test(email); /*Return `true` if valid, Otherwise return `false`*/
}
var domain = 'www.example@example.com';
var email ='emaxple@example.com';
if(ValidateEmail(email)){
email = email.split('@'); /* Split email after `@` Sign*/
email = email[1] /*After split, `email[0]=emaxple, email[1]=emaxple.com`*/
domain = domain.split('').reverse().join(''); /*Now `domain = moc.elpmaxe@elpmaxe.www`*/
email = email.split('').reverse().join(''); /*Now `email = moc.elpmaxe*/
email = email + '@'; /*Now `email = moc.elpmaxe@`*/
if(domain.indexOf(email)==0){ /*If only return `0` then valid, Otherwise Invalid*/
/*Valid with your domain*/
}else{
/*Doesn't match with your domain*/
}
}else{
/*Invalid Email*/
}