Rumah hujung hadapan web tutorial js Corak reka bentuk JavaScript--Kemahiran input validation_javascript corak strategi

Corak reka bentuk JavaScript--Kemahiran input validation_javascript corak strategi

May 16, 2016 pm 03:29 PM

Corak strategi mentakrifkan sekumpulan algoritma dan merangkumnya secara berasingan supaya ia boleh digantikan antara satu sama lain Corak ini menjadikan algoritma berubah bebas daripada pelanggan yang menggunakan pengiraan.

Tentukan dahulu borang input mudah:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-">
    <style>
      .form{
        width: px;
        height: px;
        #margin: px auto;
      }
      .form-item-label{
        width:px;
        text-align: right;
        float: left;
      }
      .form-item-input{
        float: left;
      }
      .form-item{
        width: % ;
        height: px;
        line-height: px;
      }
    </style>
  </head>
  <body>
    <div class='form'>
      <div class="form-item">
        <div class='form-item-label'><span>用户名:</span></div>
        <div class='form-item-input'><input id='userName' name='用户名' type="text"></div>
      </div>
      <div class="form-item" >
        <div class='form-item-label'><span>密码:</span></div>
        <div class='form-item-input'><input id='password' name='密码' type="text"></div>
      </div>
      <div class="form-item" >
        <div class='form-item-label'><span>确认密码:</span></div>
        <div class='form-item-input'><input id='repassword' name='密码确认' type="text"></div>
      </div>
      <div class="form-item" >
        <div class='form-item-label'><span>邮箱:</span></div>
        <div class='form-item-input'><input id='mail' name='邮箱' type="text" ></div>
      </div>
    </div>
    <br>
    <button id='submit' >提交</button>
    <script type='text/javascript' src="../reference/jquery-...min.js"></script>
  </body>
</html>
Salin selepas log masuk

Secara amnya, dalam tindakan penyerahan selepas menyunting maklumat pada halaman, maklumat input perlu disahkan Anda akan melihat bahawa banyak kod yang bertanggungjawab untuk menyemak ditulis dalam fungsi penyerahan atau dalam fungsi semakan bebas.

Sebagai contoh, seperti di bawah.         

 $(document).ready(function(){
        $('#submit').bind('click', doSubmit);
      });
      function doSubmit(){
        var eleUserName = document.getElementById('userName');
        if(eleUserName.value === '') {
          alert('用户名不能为空');
          return;
        }
        if(eleUserName.length < 6) {
          alert('用户名长度不能少于6个字符');
          return;
        }
        if(eleUserName.length > 6) {
          alert('用户名长度不能多于20个字符');
          return;
        }
      }
Salin selepas log masuk

Kaedah penulisan ini pasti dapat memenuhi keperluan fungsian, tetapi akan ada beberapa masalah:

1. Jika saya ingin menggunakannya pada halaman lain, saya perlu menyalin kod yang dipanggil semula menjadi penyalinan, dan akan terdapat banyak pertindihan kod. Yang lebih baik akan mengklasifikasikan dan membungkus kod semakan, tetapi akan ada lebih banyak pertindihan.

2. Jika saya ingin menambah pengesahan input, maka saya perlu mengubah suai fungsi penyerahan secara langsung.

3. Jika anda mengubah suai fungsi penyerahan, anda mesti meliputi semua ujian reka bentuk fungsi, kerana anda tidak tahu bila perubahan tersilap atau situasi yang tidak diketahui akan berlaku.

Langkah transformasi:

1. Anggap setiap logik pengesahan sebagai strategi pengesahan dan rangkumkan setiap fungsi strategi pengesahan Parameter fungsi harus konsisten dan boleh menerima elemen DOM, nilai yang disahkan, mesej ralat dan parameter tersuai.

2. Tentukan pengesah, anda boleh mengimport fungsi strategi pengesahan atau menambahnya.

3. Pengesah menyediakan kaedah pengesahan untuk membuat panggilan semasa pengesahan, dan secara dalaman memanggil fungsi strategi pengesahan tertentu.

4. Sahkan panggilan.

Langkah 1.

Pertimbangkan setiap satu jika sebagai peraturan perniagaan pengesahan, layan setiap peraturan perniagaan sebagai fungsi strategi yang berasingan dan rangkumkan semua fungsi strategi menjadi objek strategi.                           

 var validationStrategies = {
        isNoEmpty: function(element, errMsg, value) {
          if(value === '') {
            return this.buildInvalidObj(element, errMsg, value );
          }
        },
        minLength: function(element, errMsg, value, length) {
          if(value.length < length){
            return this.buildInvalidObj(element, errMsg, value);
          }
        },
        maxLength: function(element, errMsg, value, length) {
          if(value.length > length){
            return this.buildInvalidObj(element, errMsg, value);
          }
        },
        isMail: function(element, errMsg, value, length) {
          var reg = /^(\w-*\.*)+@(\w-&#63;)+(\.\w{2,})+$/;
          if(!reg.test(value)){
            return this.buildInvalidObj(element, errMsg, value);
          }
        }
      };
Salin selepas log masuk

Tiga parameter pertama bagi semua fungsi adalah konsisten dan diperlukan, menunjukkan elemen DOM yang disahkan, mesej ralat dan nilai yang disahkan. Yang keempat bermula dengan peraturan pengesahan fungsi itu sendiri untuk menentukan parameter tersuai.

Kaedah "buildInvalidObj" hanya menukar tiga parameter pertama kepada objek ralat dan mengembalikannya objek ralat ini akan dikembalikan selagi pengesahan gagal.

Menurut prinsip penyongsangan kebergantungan, modul peringkat tinggi tidak boleh bergantung pada modul peringkat rendah, jadi ia tidak boleh digunakan secara langsung oleh pemanggil pengesahan.

Pengenkapsulan dan pengabstrakan melalui pengesah.

Langkah 2:

Tentukan pengesah, anda boleh mengimport semua strategi pengesahan ke dalamnya, atau anda boleh menambah fungsi strategi pengesahan secara berasingan.                                                          

//输入验证器
      function InputValidators(){
        this.validators = [];
        this.strategies = {};
      }
      //从策略对象导入验证策略函数
      //参数:
      // strategies: 包含各种策略函数的对象
      InputValidators.prototype.importStrategies = function(strategies) {
        for(var strategyName in strategies) {
          this.addValidationStrategy(strategyName, strategies[strategyName]);
        }
      };
      //添加验证策略函数
      //参数:
      // name: 策略名称
      // strategy: 策略函数
      InputValidators.prototype.addValidationStrategy = function(name, strategy){
        this.strategies[name] = strategy;
      };
Salin selepas log masuk

Langkah 3:

Tambah kaedah pengesahan untuk menerima panggilan luar.

Peraturan parameter pertama ditetapkan kepada peraturan pengesahan, seperti "minLength:6". Kod berikut akan menjana panggilan ke fungsi strategi tertentu.

":6" menunjukkan parameter yang disesuaikan oleh fungsi strategi mengikut peraturannya sendiri.       

  //添加验证方法
      //参数:
      // rule: 验证策略字符串
      // element: 被验证的dom元素
      // errMsg: 验证失败时显示的提示信息
      // value: 被验证的值
      InputValidators.prototype.addValidator = function(rule, element, errMsg, value) {
        var that = this;
        var ruleElements = rule.split(":");
        this.validators.push(function() {
          var strategy = ruleElements.shift();
          var params = ruleElements;
          params.unshift(value);
          params.unshift(errMsg);
          params.unshift(element);
          return that.strategies[strategy].apply(that, params);
        });
      };
Salin selepas log masuk
Panggil semua pengesahan melalui fungsi semak. dan mengembalikan hasil yang salah.         

   //开始验证
      InputValidators.prototype.check = function() {
        for(var i = 0, validator; validator = this.validators[i++];){
          var result = validator();
          if(result) {
            return result;
          }
        }
      };
Salin selepas log masuk

Langkah 4:

Di mana pengesahan diperlukan, mula-mula buat objek pengesah baharu.                                                                       


var validators = new InputValidators();
Salin selepas log masuk
Import objek yang mengandungi fungsi strategi pengesahan atau tambah fungsi strategi pengesahan secara berasingan.                                                                        

Dapat dilihat bahawa strategi pengesahan yang berbeza boleh diprakapsulkan ke dalam objek strategi, atau boleh ditambah serta-merta mengikut situasi sebenar.
  validators.importStrategies(validationStrategies);
        validators.addValidationStrategy('isEqual', function(element, errMsg, value1, value2) {
          if(value1 !== value2) {
            return this.buildInvalidObj(element, errMsg, value1 );
          }
        });
Salin selepas log masuk
Kemudian tambahkan strategi yang perlu disahkan, elemen DOM yang disahkan, mesej ralat dan nilai yang disahkan ke dalam pengesah dengan menambahkan kaedah pengesahan Ini mengelakkan panggilan terus objek strategi dan mengurangkan gandingan.

Panggil cek pengesah untuk melaksanakan semua pengesahan.                                                                     
var eleUserName = document.getElementById('userName');
validators.addValidator('isNoEmpty', eleUserName, '用户名不能为空', eleUserName.value);
validators.addValidator('minLength:6', eleUserName, '用户名的字符个数必须是6到20个', eleUserName.value);
validators.addValidator('maxLength:20', eleUserName, '用户名的字符个数必须是6到20个', eleUserName.value);
var elePassword = document.getElementById('password');
validators.addValidator('isNoEmpty', elePassword, '密码不能为空', elePassword.value);
validators.addValidator('minLength:6', elePassword, '密码的字符个数必须是6到20个', elePassword.value);
validators.addValidator('maxLength:20', elePassword, '密码的字符个数必须是6到20个', elePassword.value);
var eleRepassword = document.getElementById('repassword');
validators.addValidator('isNoEmpty', eleRepassword, '确认密码不能为空', eleRepassword.value);
validators.addValidator('minLength:6', eleRepassword, '确认密码的字符个数必须是6到20个', eleRepassword.value);
validators.addValidator('maxLength:20', eleRepassword, '确认密码的字符个数必须是6到20个', eleRepassword.value);
validators.addValidator('isEqual:' + elePassword.value, eleRepassword, '两次密码不一致', eleRepassword.value);
var eleMail = document.getElementById('mail');
validators.addValidator('isNoEmpty', eleMail, '邮箱不能为空', eleMail.value);
validators.addValidator('isMail', eleMail, '邮箱不是一个有效的格式', eleMail.value);
Salin selepas log masuk

semak mengembalikan objek ralat Kita boleh menggunakan objek ini untuk melaksanakan operasi gesaan secara seragam pada elemen DOM selepas semakan, seperti menetapkan fokus, memilih kandungan atau membalut lapisan gaya merah di luar kotak input.
var result = validators.check();
        if(result){
          alert(result.errMsg);
          result.element.focus();
          result.element.select();
          return false;
        }
Salin selepas log masuk
Pada ketika ini, kita dapat melihat bahawa melalui perubahan mod strategi, apabila pengesahan input, kita hanya perlu mengambil berat tentang peraturan pengesahan yang hendak digunakan dan jenis maklumat segera yang akan digunakan tidak lagi didedahkan , yang sesuai untuk membuat panggilan dan susulan seterusnya.

Semua kod:

Di atas adalah keseluruhan kandungan corak reka bentuk javascript yang diperkenalkan oleh editor - pengesahan input corak strategi saya harap anda menyukainya.
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apa yang perlu saya lakukan jika saya menghadapi percetakan kod yang dihiasi untuk resit kertas terma depan? Apa yang perlu saya lakukan jika saya menghadapi percetakan kod yang dihiasi untuk resit kertas terma depan? Apr 04, 2025 pm 02:42 PM

Soalan dan penyelesaian yang sering ditanya untuk percetakan tiket kertas terma depan dalam pembangunan front-end, percetakan tiket adalah keperluan umum. Walau bagaimanapun, banyak pemaju sedang melaksanakan ...

Siapa yang dibayar lebih banyak Python atau JavaScript? Siapa yang dibayar lebih banyak Python atau JavaScript? Apr 04, 2025 am 12:09 AM

Tidak ada gaji mutlak untuk pemaju Python dan JavaScript, bergantung kepada kemahiran dan keperluan industri. 1. Python boleh dibayar lebih banyak dalam sains data dan pembelajaran mesin. 2. JavaScript mempunyai permintaan yang besar dalam perkembangan depan dan stack penuh, dan gajinya juga cukup besar. 3. Faktor mempengaruhi termasuk pengalaman, lokasi geografi, saiz syarikat dan kemahiran khusus.

Demystifying JavaScript: Apa yang berlaku dan mengapa penting Demystifying JavaScript: Apa yang berlaku dan mengapa penting Apr 09, 2025 am 12:07 AM

JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Bagaimana untuk menggabungkan elemen array dengan ID yang sama ke dalam satu objek menggunakan JavaScript? Bagaimana untuk menggabungkan elemen array dengan ID yang sama ke dalam satu objek menggunakan JavaScript? Apr 04, 2025 pm 05:09 PM

Bagaimana cara menggabungkan elemen array dengan ID yang sama ke dalam satu objek dalam JavaScript? Semasa memproses data, kita sering menghadapi keperluan untuk mempunyai id yang sama ...

Perbezaan dalam Konsol.Log Output Result: Mengapa kedua -dua panggilan berbeza? Perbezaan dalam Konsol.Log Output Result: Mengapa kedua -dua panggilan berbeza? Apr 04, 2025 pm 05:12 PM

Perbincangan mendalam mengenai punca-punca utama perbezaan dalam output konsol.log. Artikel ini akan menganalisis perbezaan hasil output fungsi Console.log dalam sekeping kod dan menerangkan sebab -sebab di belakangnya. � ...

Bagaimana untuk mencapai kesan menatal paralaks dan kesan animasi elemen, seperti laman web rasmi Shiseido?
atau:
Bagaimanakah kita dapat mencapai kesan animasi yang disertai dengan menatal halaman seperti laman web rasmi Shiseido? Bagaimana untuk mencapai kesan menatal paralaks dan kesan animasi elemen, seperti laman web rasmi Shiseido? atau: Bagaimanakah kita dapat mencapai kesan animasi yang disertai dengan menatal halaman seperti laman web rasmi Shiseido? Apr 04, 2025 pm 05:36 PM

Perbincangan mengenai realisasi kesan animasi tatal dan elemen Parallax dalam artikel ini akan meneroka bagaimana untuk mencapai yang serupa dengan laman web rasmi Shiseido (https://www.shiseido.co.jp/sb/wonderland/) ... ...

Adakah JavaScript sukar belajar? Adakah JavaScript sukar belajar? Apr 03, 2025 am 12:20 AM

Pembelajaran JavaScript tidak sukar, tetapi ia mencabar. 1) Memahami konsep asas seperti pembolehubah, jenis data, fungsi, dan sebagainya. 2) Pengaturcaraan asynchronous tuan dan melaksanakannya melalui gelung acara. 3) Gunakan operasi DOM dan berjanji untuk mengendalikan permintaan tak segerak. 4) Elakkan kesilapan biasa dan gunakan teknik debugging. 5) Mengoptimumkan prestasi dan mengikuti amalan terbaik.

Bagaimana untuk melaksanakan fungsi seretan panel dan drop pelarasan yang serupa dengan vscode dalam pembangunan front-end? Bagaimana untuk melaksanakan fungsi seretan panel dan drop pelarasan yang serupa dengan vscode dalam pembangunan front-end? Apr 04, 2025 pm 02:06 PM

Terokai pelaksanaan fungsi seretan panel dan drop panel seperti VSCode di bahagian depan. Dalam pembangunan front-end, bagaimana untuk melaksanakan vscode seperti ...

See all articles