我已经配置了一个Grunt文件,用我所有的库和我的代码构建一个JS文件,所以我只有一个JS文件包含在我的网站中。这一切都运行正常,但我刚刚将JQuery Validate插件添加到其中(http://jqueryvalidation.org/)并且这个插件正在工作但不完全,我认为它是我的代码以及我如何构建它的红色。
但我有多种形式,其中一种是更改用户电子邮件。我还应该在这里说我正在使用CakePHP和它的表单助手构建这个站点(尽管该站点的那一侧完全正常工作而没有任何错误)。
这是我正在使用的代码:
$( "#EmailChange" ).validate({
rules: {
'data[Email][currentemail]':{
required: true,
email: true
},
'data[Email][newemail]':{
required: true,
email: true
},
'data[Email][emailconfirm]': {
equalTo: "#NewEmail", <-id for the [email][newemail] input
required: true,
email: true
}
},
messages: {
'data[EmailUpdate][currentemail]': "email address is needed",
'data[EmailUpdate][newemail]': "a vaild email address is needed",
'data[EmailUpdate][emailconfirm]': "second email does not match",
}
});
现在这样可行,但是没有正确验证我的电子邮件地址,我将输入someemail@something
,这将删除或返回有效的电子邮件,然后输入域名后缀。当我在自己的网站上的电子邮件中使用测试字段时,它不会这样做,它只会在用户输入后缀后返回有效。
那么我做错了什么?
感谢。
答案 0 :(得分:10)
使用以下代码发送电子邮件:
jQuery.validator.addMethod("validEmail", function(value, element)
{
if(value == '')
return true;
var temp1;
temp1 = true;
var ind = value.indexOf('@');
var str2=value.substr(ind+1);
var str3=str2.substr(0,str2.indexOf('.'));
if(str3.lastIndexOf('-')==(str3.length-1)||(str3.indexOf('-')!=str3.lastIndexOf('-')))
return false;
var str1=value.substr(0,ind);
if((str1.lastIndexOf('_')==(str1.length-1))||(str1.lastIndexOf('.')==(str1.length-1))||(str1.lastIndexOf('-')==(str1.length-1)))
return false;
str = /(^[a-zA-Z0-9]+[\._-]{0,1})+([a-zA-Z0-9]+[_]{0,1})*@([a-zA-Z0-9]+[-]{0,1})+(\.[a-zA-Z0-9]+)*(\.[a-zA-Z]{2,3})$/;
temp1 = str.test(value);
return temp1;
}, "Please enter valid email.");
在规则中使用以下
rules: {
'data[Email][newemail]': {
required: true,
validEmail: true
}
}
答案 1 :(得分:1)
jQuery Validate Plugin使用与HTML标准相同的电子邮件验证。
从jQuery Validate Plugin的源代码链接到过时的http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#e-mail-state-%28type=email%29,现在应该是https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address:
以下与JavaScript和Perl兼容的正则表达式是上述定义的实现。
/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/someemail@something
这正是插件(目前在版本1.13.1中)使用的,并且匹配someemail@something
为有效。
HTML标准使用此类规范的原因也在规范网站上说明:
此要求是RFC 5322的willful violation,它定义了同时过于严格(在“@”字符之前),过于模糊(在“@”字符之后)的电子邮件地址的语法,并且太宽松(允许评论,空白字符和大多数用户不熟悉的方式引用的字符串)在这里实用。
总结一下 - 如果您不喜欢它,请使用Validation Plugin的自定义验证功能。
答案 2 :(得分:0)
此问题出现在jquery验证插件版本14.尝试使用版本12,它可以正常工作。