2

現在、米国の郵便番号を受け入れるサイトで作業中です。私はすでにjquery validateを持っています。私が今やりたいことは、ユーザーが国を選択するためのドロップダウンを追加し、選択した国に基づいて、郵便番号を検証して一致することを確認することです。

どうすればこれを行うことができるかについて、誰かが私にいくつかの指針を与えることができますか? 基本的に、国のドロップダウンに基づいて、バリデータ関数が使用している正規表現を変更するだけです。jqueryバリデーター関数の(私が想定している)関連セクションは次のとおりです。

(function ($) {
$.fn.validate = function (options) {
    var defaults = {
        invalidClass: 'error',
        rules: {
            req: /.{1,}/g,
            email: /[\w\.=-]+@[\w\.-]+\.[\w]{2,3}/g,
            phone: /\D?(\d{3})\D?\D?(\d{3})\D?(\d{4})/g,
            zip: /\d{5}$|^\d{5}-\d{4}/g,
            //password: /^(?=.*\d)(?=.*[a-zA-Z]).{8,20}$/g,
            password: /^(?=.{8,20}$)(?=.*\d)(?=.*[a-zA-Z]).*/g,
            //nospecialchars: /[^<>?,\/\\\[\]\{\}\|!@#$%^&*()_+;:"]{1,}/g
            nospecialchars: /^(?!.*[?<>;]).+$/g
        },
        error_messages: {
            req: 'Oops..',
            email: 'Please enter your email address.',
            phone: '',
            zip: 'Please give me a valid zip.',
            max: 'too many characters.',
            password: '',
            nospecialchars: ''
        },
        success: null,
        failure: null
    },
    errors = [],
    opts = $.extend(true, defaults, options);

    return this.each(function () {
        var $this = $(this);

        $(this).find('input[type="submit"]:not(.cancel), button').click(function () {
            errors = [];
            validate_fields($this);

            if ($this.find('.error').length === 0) {
                if (typeof opts.success == 'function')
                    return opts.success();
            }
            else {
                if (typeof opts.failure == 'function')
                    return opts.failure(errors);
            }
        });
    });

私はjqueryにあまり詳しくないので、正規表現を設定するif-elseまたはcaseステートメントを作成するための構文がここにあるのかわかりません。

助けてくれてありがとう。

編集:これは実際に検証を呼び出すコードの一部です

   <script type="text/javascript">
    $(function () {
        setForm();

        $('form').validate({
            error_messages: {
                req: null
            },
            failure: function (errors) {
                var sel = '';

                $(".errMsg").hide();
                for (x in errors) {
                    sel += ',#' + errors[x][0];
                }

                if (sel.length > 0) {
                    sel = sel.substring(1);

                    $(sel).parent().find(".errMsg").show(0, function () {
                        $('#home .orange_box, #home .HomeRight').height('auto');
                        $('#infov .white_box, #infov .orangeRight').height('auto');
                        $('#findt .orange_box, #findt .HomeRight').height('auto');

                        if ($.browser.msie && $.browser.version == 8) {
                            evenColumns('#home .orange_box', '#home .HomeRight', -16);
                            evenColumns('#infov .white_box', '#infov .orangeRight', -16);
                            evenColumns('#findt .orange_box', '#findt .HomeRight', -16);
                        }
                        else {
                            evenColumns('#home .orange_box', '#home .HomeRight', -15);
                            evenColumns('#infov .white_box', '#infoforv .orangeRight', -15);
                            evenColumns('#findt .orange_box', '#findt .HomeRight', -15);
                        }
                    });
                }

                return false;
            },
            success: function () {
                $(".errMsg").hide();
                return true;
            }
        });
4

1 に答える 1

0

私はオブジェクトを作成します、魔女は持っています:

  • 検証のための関数
  • 他のすべての国のオブジェクト
  • デフォルトルールのオブジェクト
   validation = {
      validate : function( sCountryName, sToValidate ){
        return ( null != sToValidate.match( this.countries[ sCountryName ] ? this.countries[ sCountryName ].zip : this.defaultRules.zip ))
      },

      countries : {
        england : {
          zip : /\d{5}$|^\d{5}-\d{4}/g
        }
      },
      defaultRules : {
        zip : /\d{5}$|^\d{5}-\d{4}/g
      }
    }
于 2011-11-17T01:14:19.597 に答える