【问题标题】:jQuery Validation plugin; check if field is NOT an E-mailjQuery 验证插件;检查字段是否不是电子邮件
【发布时间】:2014-04-02 09:40:08
【问题描述】:

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

【问题讨论】:

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


    【解决方案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
        }
    }
    

    演示: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 插件为您的诚实用户实现更好的用户体验。

    【讨论】:

    • 很好的深入回答!
    【解决方案2】:

    您可以检查 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。这是给普通人的信息,到处粘贴电子邮件的人不是正常人,所以你不必担心他们会看到丑陋的错误。

    【讨论】:

      猜你喜欢
      • 2013-06-15
      • 1970-01-01
      • 2013-02-20
      • 2013-02-28
      • 1970-01-01
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      • 2012-12-31
      相关资源
      最近更新 更多