jQuery Validation插件;检查字段是否不是电子邮件

时间:2014-04-02 09:40:09

标签: php forms validation zend-framework jquery-validate

我正在调整一个小型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表单验证。

enter image description here

2 个答案:

答案 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插件为诚实用户提供更好的用户体验。