H5完成用户注册自动校验的实例详解

Y2J
Lepaskan: 2017-05-24 13:27:07
asal
2520 orang telah melayarinya

Html5实现用户注册自动校验功能实例代码

05-24 10:49:46作者:php中文网

抽时间写了一个带有自动校验功能的Html5用户注册Demo。使用到Handlebars模板技术和手机验证码校验。

以下是效果截图:

1.页面代码:usersRegister.hbs

XML/HTML Code复制内容到剪贴板
  1. >     

  2.      

  3.      

  4.      

  5. <html lang="en">     

  6.      

  7. <head>     

  8.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">     

  9.     <meta http-equiv="X-UA-Compatible" content="IE=edge" />     

  10.     <title>用户注册title>     

  11.          

  12.     <div class="main" >     

  13.         <div style="height:5px;text-align:center;font-size:25px"> 欢迎您注册!div>     

  14.              

  15.         <form id="my-form" class="myform">     

  16.             <div>     

  17.                 <label>用户名:label><input id="username" name="username" type="text" />     

  18.             div>     

  19.             <div>     

  20.                      

  21.                 <label>密码:label><input id="pass" name="password" type="text" />     

  22.             div>     

  23.             <div>     

  24.                 <label>邮箱:label><input id="email" name="email"

  25. data-ideal="required email" type="email" />     

  26.             div>     

  27.             <div>     

  28.                 <label>电话:label><input id="telephone" type="text" name="phone" data-ideal="phone" />     

  29.             div>     

  30.             <div>     

  31.                 <label>供应商V码:label><input id="vCode" type="text" name="vCode" data-ideal="vCode" />     

  32.             div>     

  33.             <div>     

  34.                 <label>真实姓名:label><input id="trueName" type="text" name="trueName" data-ideal="trueName" />     

  35.             div>     

  36.             <div>     

  37.                 <label>手机验证码:label><input id="telCode" type="text" name="telCode" data-ideal="telCode" />     

  38.             div>     

  39.             <div style="margin-bottom:5px;">     

  40.                 <button id="getTelCode" type="button" style="margin-left:160px; margin-right:auto;" >获取手机校验码button>     

  41.                 <hr style="margin-top:5px; margin-bottom:5px;" />     

  42.             div>     

  43.                  

  44.     div>     

  45. <script type="text/javascript">     

  46.     var options = {     

  47.         onFail : function() {     

  48.             alert($myform.getInvalid().length + ' invalid fields.')     

  49.         },     

  50.         inputs : {     

  51.             'password' : {     

  52.                 filters : 'required pass'     

  53.             },     

  54.             'username' : {     

  55.                 filters : 'required username'     

  56.             },     

  57.             'email' : {     

  58.                 filters : 'required email'     

  59.             },     

  60.             'phone' : {     

  61.                 filters : 'required phone'     

  62.             },     

  63.             'trueName' : {     

  64.                 filters : 'required'     

  65.             },     

  66.             'vCode' : {     

  67.                 filters : 'required'     

  68.             },     

  69.             'telCode' : {     

  70.                 filters : 'required'     

  71.             }     

  72.             /*     

  73.             'age' : {     

  74.                 filters : 'required digits',     

  75.                 data : {     

  76.                    min : 16,     

  77.                    max : 70     

  78.                 }     

  79.             },     

  80.             'file' : {     

  81.                 filters : 'extension',     

  82.                 data : {     

  83.                     extension : [ 'jpg' ]     

  84.                 }     

  85.             },     

  86.             'comments' : {     

  87.                 filters : 'min max',     

  88.                 data : {     

  89.                     min : 50,     

  90.                     max : 200     

  91.                 }     

  92.             },     

  93.             'states' : {     

  94.                 filters : 'exclude',     

  95.                 data : {     

  96.                     exclude : [ 'default' ]     

  97.                 },     

  98.                 errors : {     

  99.                     exclude : '选择国籍.'     

  100.                 }     

  101.             },     

  102.             'langs[]' : {     

  103.                 filters : 'min max',     

  104.                 data : {     

  105.                     min : 2,     

  106.                     max : 3     

  107.                 },     

  108.                 errors : {     

  109.                     min : 'Check at least <strong>2strong> options.',     

  110.                     max : 'No more than <strong>3strong> options allowed.'     

  111.                 }     

  112.             }     

  113.             */     

  114.         }     

  115.     };     

  116.     $('#getTelCode').click(function() {     

  117.         var telephone = document.getElementById("telephone").value;   //手机号码     

  118.         if (telephone == null || telephone == ""){     

  119.             alert("手机号码不能为空!");     

  120.         }     

  121.         else{     

  122.             $.ajax({     

  123.                 type : "GET",     

  124.                 dataType : "json",     

  125.                 url : "../api/getTelCode?telephone="+ telephone,     

  126.                 success : function(msg) {     

  127.                 },     

  128.                 error : function(e) {     

  129.                     alert("获取手机校验码失败!" + e);     

  130.                 }     

  131.             });     

  132.         }     

  133.     });     

  134.     var $myform = $('#my-form').idealforms(options).data('idealforms');     

  135.     $('#submit').click(function() {     

  136.         var username = document.getElementById("username").value; //用户名     

  137.         var password = document.getElementById("pass").value;    //密码     

  138.         var email = document.getElementById("email").value;     //邮箱     

  139.         var telephone = document.getElementById("telephone").value;     //手机号码     

  140.         var vCode = document.getElementById("vCode").value;     //公司V码     

  141.         var telCode = document.getElementById("telCode").value;     //手机校验码     

  142.         var trueName = document.getElementById("trueName").value;     //真实姓名     

  143.         $.ajax({     

  144.             type : "GET",     

  145.             url : "../api/usersRegister?username="+ username +"password="+ password +"email="+ email +"telephone="+ telephone +"vCode="+ vCode +"telCode="+ telCode +"trueName="+ trueName,     

  146.             success : function(msg) {     

  147.                //获取当前网址,如: http://localhost:8083/uimcardprj/share/meun.jsp     

  148.                var curWwwPath = window.document.location.href;     

  149.                //获取主机地址之后的目录,如: uimcardprj/share/meun.jsp     

  150.                var pathName = window.document.location.pathname;     

  151.                var pos = curWwwPath.indexOf(pathName);     

  152.                //获取主机地址,如: http://localhost:8083     

  153.                var localhostPaht = curWwwPath.substring(0, pos);     

  154.                //获取带"/"的项目名,如:/uimcardprj     

  155.                var projectName = pathName.substring(0, pathName.substr(1).indexOf('/') + 1);     

  156.                window.location.href = projectName + "/login";     

  157.                alert("注册成功!");     

  158.             },     

  159.             error : function(e) {     

  160.                 alert("注册失败!" + e);     

  161.             }     

  162.         });     

  163.     });     

  164.     $('#reset').click(function() {     

  165.         $myform.reset().fresh().focusFirst();     

  166.     });     

  167. script>     

  168. body>     

  169. html>    

2.jq输入校验:jquery.idealforms.js

该js校验初始版本来自Cedric Ruiz,我略有修改。

部分校验的规则如下:

required: '此处是必填的.'

number: '必须是数字.',

digits: '必须是唯一的数字.'

name: '必须至少有3个字符长,并且只能包含字母.'

username: '用户名最短5位,最长30位,请使用英文字母、数字、中文和下划线. 用户名首字符必须为字母、数字、中文,不能为全数字.中文最长21个字.'

pass: '密码的位数必须的在6-15位之间,并且至少包含一个数字,一个大写字母和一个小写字母.'

strongpass: '必须至少为8个字符长,至少包含一个大写字母和一个小写字母和一个数字或特殊字符.'

email: '必须是一个有效的email地址. (例: user@gmail.com)'

phone: '必须是一个有效的手机号码. (例: 18723101212)'

以下是整个代码文件:

XML/HTML Code复制内容到剪贴板
  1. /*--------------------------------------------------------------------------    

  2.   jq-idealforms 2.1    

  3.   * Author: Cedric Ruiz    

  4.   * License: GPL or MIT    

  5.   * Demo: http://elclanrs.github.com/jq-idealforms/    

  6.   *    

  7. --------------------------------------------------------------------------*/     

  8. ;(function ( $, window, document, undefined ) {     

  9.   'use strict';     

  10.   // Global Ideal Forms namespace     

  11.   $.idealforms = {}     

  12.   $.idealforms.filters = {}     

  13.   $.idealforms.errors = {}     

  14.   $.idealforms.flags = {}     

  15.   $.idealforms.ajaxRequests = {}     

  16. /*--------------------------------------------------------------------------*/     

  17. /**    

  18.  * @namespace A chest for various Utils    

  19.  */     

  20. var Utils = {     

  21.   /**    

  22.    * Get width of widest element in the collection.    

  23.    * @memberOf Utils    

  24.    * @param {jQuery object} $elms    

  25.    * @returns {number}    

  26.    */     

  27.   getMaxWidth: function( $elms ) {     

  28.     var maxWidth = 0     

  29.     $elms.each(function() {     

  30.       var width = $(this).outerWidth()     

  31.       if ( width > maxWidth ) {     

  32.         maxWidth = width     

  33.       }     

  34.     })     

  35.     return maxWidth     

  36.   },     

  37.   /**    

  38.    * Hacky way of getting LESS variables    

  39.    * @memberOf Utils    

  40.    * @param {string} name The name of the LESS class.    

  41.    * @param {string} prop The css property where the data is stored.    

  42.    * @returns {number, string}    

  43.    */     

  44.   getLessVar: function( name, prop ) {     

  45.     var value = $('<p class="' + name + '">p>').hide().appendTo('body').css( prop )     

  46.     $('.' + name).remove()     

  47.     return ( /^\d+/.test( value ) ? parseInt( value, 10 ) : value )     

  48.   },     

  49.   /**    

  50.    * Like ES5 Object.keys    

  51.    */     

  52.   getKeys: function( obj ) {     

  53.     var keys = []     

  54.     for(var key in obj) {     

  55.       if ( obj.hasOwnProperty( key ) ) {     

  56.         keys.push( key )     

  57.       }     

  58.     }     

  59.     return keys     

  60.   },     

  61.   // Get lenght of an object     

  62.   getObjSize: function( obj ) {     

  63.     var size = 0, key;     

  64.     for ( key in obj ) {     

  65.       if ( obj.hasOwnProperty( key ) ) {     

  66.         size++;     

  67.       }     

  68.     }     

  69.     return size;     

  70.   },     

  71.   isFunction: function( obj ) {     

  72.     return typeof obj === nbsp;'function'     

  73.   },     

  74.   isRegex: function( obj ) {     

  75.     return obj instanceof RegExp     

  76.   },     

  77.   isString: function( obj ) {     

  78.     return typeof obj === 'string'     

  79.   },     

  80.   getByNameOrId: function( str ) {     

  81.     var $el = $('[name="'+ str +'"]').length     

  82.       ? $('[name="'+ str +'"]') // by name     

  83.       : $('#'+ str) // by id     

  84.     return $el.length     

  85.       ? $el     

  86.       : $.error('The field "'+ str + '" doesn\'t exist.')     

  87.   },     

  88.   getFieldsFromArray: function( fields ) {     

  89.     var f = []     

  90.     for ( var i = 0l = fields.length; i < l; i++ ) {

  91. f.push( Utils.getByNameOrId( fields[i] ).get(0) )

  92. }

  93. return $( f )

  94. },

  95. convertToArray: function( obj ) {

  96. return Object.prototype.toString.call( obj ) === '[object Array]'

  97. ? obj : [ obj ]

  98. },

  99. /**

  100. * Determine type of any Ideal Forms element

  101. * @param $input jQuery $input object

  102. */

  103. getIdealType: function( $el ) {

  104. var type = $el.attr('type') || $el[0].tagName.toLowerCase()

  105. return (

  106. /(text|password|email|number|search|url|tel|textarea)/.test( type ) && 'text' ||

  107. /file/.test( type ) && 'file' ||

  108. /select/.test( type ) && 'select' ||

  109. /(radio|checkbox)/.test( type ) && 'radiocheck' ||

  110. /(button|submit|reset)/.test( type ) && 'button' ||

  111. /h\d/.test( type ) && 'heading' ||

  112. /hr/.test( type ) && 'separator' ||

  113. /hidden/.test( type ) && 'hidden'

  114. )

  115. },

  116. /**

  117. * Generates an input

  118. * @param name `name` attribute of the input

  119. * @param type `type` or `tagName` of the input

  120. */

  121. makeInput: function( name, value, type, list, placeholder ) {

  122. var markup, items = [], item, i, len

  123. function splitValue( str ) {

  124. var item, value, arr

  125. if ( /::/.test( str ) ) {

  126. arr = str.split('::')

  127. item = arr[ 0 ]

  128. value = arr[ 1 ]

  129. } else {

  130. item = value = str

  131. }

  132. return { item: item, value: value }

  133. }

  134. // Text & file

  135. if ( /^(text|password|email|number|search|url|tel|file|hidden)$/.test(type) )

  136. markup = '+

  137. 'type="'+ type +'" '+

  138. 'id="'+ name +'" '+

  139. 'name="'+ name +'" '+

  140. 'value="'+ value +'" '+

  141. (placeholder && 'placeholder="'+ placeholder +'"') +

  142. '/>'     

  143.     // Textarea     

  144.     if ( /textarea/.test( type ) ) {     

  145.       markup = '