javascriptポリシーモードを利用して書いた入力内容検証プラグイン

4753 ワード

一つのWebプロジェクトでは、登録、ログイン、ユーザー情報の修正などの機能の実現は、フォームの提出に欠かせない.ユーザーが入力したデータをバックグラウンドに渡す前に、登録する時にユーザー名を記入したかどうか、パスワードの長さが規定に合っているかどうかを確認する必要があります.このように、不正なデータの提出による不必要なネットワークオーバーヘッドを回避することができる.以下はケースです



  
  <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"/>
  <script src="./validator.js"/>


  <form id="registerForm" method="post">
          :
    <input type="text" name="userName"/> <br/>
         :
    <input type="text" name="password"/> <br/>
           :
    <input type="text" name="phoneNumber"/><br/>
         :
    <input type="text" name="email"/><br/>
    <input class="button_btn" type="button" value="button" name=""/>
  </form>


<script>  
  var validataFunc = function () {
    var validator = new Validator();
    validator.add(registerForm.userName,[{ strategy: 'isNonEmpty', errorMsg: 'username    ' }]);
    validator.add(registerForm.password, [{ strategy: 'isNonEmpty', errorMsg: 'password    ' },  {strategy:"validatePwd",errorMsg:"password     "},{ strategy: 'minLength:6', errorMsg: '         6  ' }]);
    validator.add(registerForm.phoneNumber, [{ strategy: 'isNonEmpty', errorMsg: 'phoneNumber    ' }, { strategy: "isMobile", errorMsg: "phoneNumber    " }]);
    validator.add(registerForm.email, [{ strategy: 'isNonEmpty', errorMsg: 'email    ' }, {strategy:"validateEmail",errorMsg:"email     "}]);
    var msg = validator.start();
    if (msg) {
      return msg;
    }
  }
  var registerForm = document.getElementById('registerForm');
  var button_btn=document.getElementsByClassName('button_btn');
  button_btn[0].onclick = function () {
    var msg = validataFunc();
    if (msg) {
      alert(msg);
      return false;
    }
  }
  
</script>
</code></pre> 
 <pre><code>//validator.js
//            
var strategies = {
    isNonEmpty: function (value, errorMsg) {
        if (value == "") {
            return errorMsg;
        }
    },
    minLength: function (value, length, errorMsg) {
        if (value.length < length) {
            return errorMsg;
        }
    },
    isMobile: function (value, errorMsg) {
        if (!/^1[3|5|6|8][0-9]{9}$/.test(value)) {
            return errorMsg;
        }
    },
    dataType: function (type, obj) {
        return Object.prototype.toString.call(obj) === '[object ' + type + ']';
    },
    //   
    validateUsername: function (value, errorMsg) {
        var regex = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
        var regex2 = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
        var regex3 = /^\w+$/;
        if (!(regex.test(value) || regex2.test(value) || regex3.test(value))) {
            return errorMsg;
        }
    },

    //   
    validatePhone: function (value, errorMsg) {
        var regex = /^(1[2|3|4|5|6|7|8])\d{9}$/;
        if (!regex.test(value)) {
            return errorMsg;
        }
    },

    //  
    validateEmail: function (value, errorMsg) {
        var regex = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
        if (!regex.test(value)) {
            return errorMsg;
        }
    },

    //  
    validatePwd: function (value, errorMsg) {
        var regex = /^(?![0-9_]+$)(?![a-zA-Z_]+$)[0-9a-zA-Z_]{6,20}$/;
        if (!regex.test(value)) {
            return errorMsg;
        }
    }
}
//           
function Validator() {
    this.cache = [];
}
Validator.prototype.add = function (ele, rules) {
    if (!strategies.dataType("Array", rules)) {
        throw new Error("add         ,     add          ");
        return false;
    } else {
        var self = this;
        for (var i = 0, rule; rule = rules[i++];) {
            (function (rule) {
                var ary = rule.strategy.split(":");
                self.cache.push(function () {
                    var strategy = ary.shift();
                    ary.unshift(ele.value);
                    ary.push(rule.errorMsg);
                    return strategies[strategy].apply(self, ary);
                });
            })(rule);
        }
    }
}
Validator.prototype.start = function () {
    for (var i = 0, item; item = this.cache[i++];) {
        var errorMsg = item();
        if (errorMsg) {
            return errorMsg;
        }
    }
}
</code></pre> 
</article>
                            </div>
                        </div>