我正在调整一个小型Zend电子商务网站,最近我们收到了一些机器人输入,他们只是在各个领域填写电子邮件地址。这就是为什么我希望我的表单验证检查该字段不是电子邮件(或者可能只是不包含" @")来传递。其他想法是有一个无法填写的隐藏字段。我如何实现这一目标?因为我发现很难找到一种方法来使结果成为错误以便传递(而不是电子邮件)。
目前有两种验证方法,其中一种是jQuery Validation插件
setupFormValidation : function() {
$('#planOrderForm').validate({
ignore: [],
rules : {
contactPerson:{
required: true,
minlength: 4
},
contactEmail: {
required:true,
email: true
},
contactPhone: 'required',
contactAddress: 'required',
contactZipcode: 'required',
contactCity: 'required'
},
messages : {
contactPerson: {
required: $('#name-message-1').html(),
minlength: $('#name-message-2').html()
},
contactEmail: {
required: $('#email-message-1').html(),
email: $('#email-message-2').html()
},
contactPhone: $('#phone-message').html(),
contactAddress: $('#address-message').html(),
contactZipcode: $('#zip-city-message').html(),
contactCity: $('#zip-city-message').html()
},
errorElement : 'div',
errorPlacement: function(error, element) {
if( element.attr('id')=='contactZipcode'||element.attr('id')=='contactCity'){
console.log(element.parent());
if(element.parent().find('.error-message').length==0){
error.insertAfter('#contactCity');
error.addClass('error-message');
}
} else {
offset = element.offset();
error.insertAfter(element);
error.addClass('error-message');
}
},
submitHandler : function(form) {
form.submit();
}
});
另一个是通过Zend addElement函数:
/* email */
$this->addElement('text', 'contactEmail', array(
'label' => 'form_plan_email',
'required' => true,
'trim' => true,
'validators' => array('EmailAddress'),
'maxLength' => 255,
'decorators' => $customElementDecorators
));
首选方法是通过jQuery表单验证。
答案 0 :(得分:1)
您可以查看Zend的电子邮件验证程序,复制其内容并还原其结果。然后将其添加到您的元素中:
$notmail = new MyScripts_Validators_NotMail();
$this->addElement('text', 'contactEmail', array(
'label' => 'form_plan_email',
'required' => true,
'trim' => true,
'validators' => array($notmail),
'maxLength' => 255,
'decorators' => $customElementDecorators
你不应该担心JS。这是普通人的信息,而且那些粘贴电子邮件的人并不是一个人,所以你不必担心他们会看到丑陋的错误。
答案 1 :(得分:1)
引用OP:
"首选方法是通过jQuery表单验证。"
要使用jQuery Validation插件执行此操作,您可以使用the .addMethod()
method编写自定义规则。返回true
传递,false
验证失败(显示消息)。
jQuery.validator.addMethod("noEmail", function(value, element) {
return (value.indexOf("@") == -1);
}, "Please don't enter an email address");
宣称:
rules: {
myfield: {
noEmail: true
}
}
DEMO:http://jsfiddle.net/CW7Pt/
然而,是什么让你觉得垃圾邮件机器人会使用任何jQuery / JavaScript?所有人要做的就是在他们的浏览器中禁用JavaScript并且没有jQuery验证。由于垃圾邮件机器人模仿浏览器,他们可能不会有任何能够阻止其任务的任何启用(如JavaScript)。
更好的解决方案是使用服务器端(PHP& Zend)验证,任何用户都无法绕过或禁用它。
framework.zend.com/manual/1.11/en/zend.validate.writing_validators.html
您仍然可以使用jQuery Validation插件为诚实用户提供更好的用户体验。