<head> <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.1/jquery.validate.min.js"></script> <style type="text/css"> #myform label.error{ color: #e4007f; display: inline-block; padding: 3px 3px; font-size: 12px; line-height: 1; width: auto; } </style> </head>
<body> <form method="POST" action="" id="myform"> <div class="form-group"> <label>姓名<span>(必須要大於 3 個字,且小於 8 個字,必填)</span></label> <input type="text" name="user_name" class="required" minlength="3" maxlength="8" > </div> <div class="form-group"> <label>Email<span>(規則:Email 格式,必填)</span></label> <input type="email" name="user_mail" class="required" > </div> <div class="form-group"> <label>最喜歡的網站<span>(規則:URL格式)</span></label> <input type="url" name="website"> </div> <div class="form-group"> <label>出生年份</label> <input type="tel" class="digits" name="user_birthy"> </div> <div class="form-group"> <label>密碼</label> <input type="password" name="user_pwd" id="user-pwd-input" > </div> <div class="form-group"> <label>一樣的密碼<span>(規則:要跟上一格寫一樣)</span></label> <input type="password" name="user_pwd_again" > </div> <br/> <h5 class="text-error">## 以下將示範一些特別的 Rule</h5> <div class="form-group"> <label>複雜密碼<span>(規則:6~20個字元的英文字母、數字混合,但不含空白鍵及標點符號。)</span></label> <input type="password" class="checkpwdhard" name="pwdhard" > </div> <div class="form-group"> <label>有規則的姓名<span>(規則:姓名可為中文(最少兩字)或英文(最少三字),英文請勿使用除了空白、底線、DASH以外的符號)</span></label> <input type="text" class="checkname" name="namehard" > </div> <div class="form-group"> <label>台灣手機號碼<span>(規則:僅允許09開頭的10碼數字,且會自動將使用者寫的 8869 改成 09)</span></label> <input type="tel" class="mobileTaiwan" name="mobileTaiwanInput" > </div> <div class="form-group"> <label>一般市話<span>(規則:僅接受數字、#-()等符號)</span></label> <input type="tel" class="phoneStyle" name="phoneInput" > </div> <div class="form-group"> <label>身分證字號<span>(規則:一個大寫英文字開頭,且接續一個 1 或 2 數字的10個字字串)</span></label> <input type="text" class="chkPid" name="user_pid" maxlength="10"> </div> <div class="form-group"> <label>民國出生年月日<span>(規則:民國0~104年之間)</span></label> <input type="tel" class="taiwanBirth" name="user_birth" minlength="6" maxlength="7"> </div> <button type="submit" >送出</button> </form> </body>
<script type="text/javascript"> $(document).ready(function(){ //自己這個站的 js $("#myform").validate({ submitHandler: function(form) { form.submit(); }, errorPlacement: function(error, element) { element.closest('.form-group').append(error); }, rules: { user_pwd_again: { equalTo : '#user-pwd-input' } } }); }); </script>
//可以把這些放到另一個 js 裡面; // 用來修改預設的規則的錯誤文字; jQuery.extend(jQuery.validator.messages, { required: "此欄位必填.", remote: "Please fix this field.", email: "請輸入正確的 Email 信箱.", url: "請輸入正確的網址.", date: "請輸入正確的日期.", dateISO: "請輸入正確的 (ISO) 日期格式.", number: "本欄位請填入數字.", digits: "本欄位請填入數字.", creditcard: "請輸入正確的信用卡號.", equalTo: "請再次輸入相同的值.", maxlength: $.validator.format("至多輸入 {0} 個字."), minlength: $.validator.format("至少輸入 {0} 個字."), rangelength: $.validator.format("請輸入 {0} 到 {1} 個字."), range: $.validator.format("請輸入 {0} 到 {1} 的數字."), max: $.validator.format("請輸入小於等於 {0} 的值."), min: $.validator.format("請輸入大於等於 {0} 的值.") });
//可以把這些放到另一個 js 裡面; // 以下是各個 RULE // 基本上 pattern 就是 // jQuery.validator.addMethod("規則名稱英文", function( value, element ) { // var str = value; // var result = false; // if(驗證通過){ // result = true; // } else { // result = false; // } // return result; // }, "驗證不通過的訊息"); jQuery.validator.addMethod("mobileTaiwan", function( value, element ) { var str = value; var result = false; if(str.length > 0){ //是否只有數字; var patt_mobile = /^[\d]{1,}$/; result = patt_mobile.test(str); if(result){ //檢查前兩個字是否為 09 //檢查前四個字是否為 8869 var firstTwo = str.substr(0,2); var firstFour = str.substr(0,4); var afterFour = str.substr(4,str.length-1); if(firstFour == '8869'){ $(element).val('09'+afterFour); if(afterFour.length == 8){ result = true; } else { result = false; } } else if(firstTwo == '09'){ if(str.length == 10){ result = true; } else { result = false; } } else { result = false; } } } else { result = true; } return result; }, "手機號碼不符合格式,僅允許09開頭的10碼數字"); jQuery.validator.addMethod("chkPid", function(value, element) { var people_id = value.replace(/\s+/g, ""); return ( this.optional(element) ||/^[A-Z]{1}[1-2]{1}[0-9]{8}$/.test(people_id) ); }, "身分證字號需為一個大寫英文字開頭,且接續一個 1 或 2 數字的10個字字串"); jQuery.validator.addMethod("taiwanBirth", function(value, element) { var str = value; var result = false; if(str.length > 0){ //是否只有數字; var patt_digits = /^[\d]{1,}$/; result = patt_digits.test(str); if(result){ if(str.length == 7){ var firstThree = parseInt(str.substr(0,3)); var middleTwo = parseInt(str.substr(3,2)); var lastTwo = parseInt(str.substr(5,2)); if(firstThree <= 104){ var setY = firstThree+1911; var setM = middleTwo-1; var setD = lastTwo; var testDate = new Date(setY,setM,setD); if(testDate.getMonth() == setM && testDate.getDate() == setD){ result = true; } else { result = false; } } else { result = false; } } if(str.length == 6) { var firstTwo = parseInt(str.substr(0,2)); var middleTwo = parseInt(str.substr(2,2)); var lastTwo = parseInt(str.substr(4,2)); var setY = firstTwo+1911; var setM = middleTwo-1; var setD = lastTwo; var testDate = new Date(setY,setM,setD); if(testDate.getMonth() == setM && testDate.getDate() == setD){ result = true; } else { result = false; } } } } else { result = true; } return result; }, "生日不符合格式"); jQuery.validator.addMethod("phoneStyle", function( value, element ) { var str = value; var result = false; if(str.length > 0){ var patt_phone = /^[\d\-\(\)\#]{1,}$/; result = patt_phone.test(str); } else { result = true; } return result; }, "電話號碼不符合格式,僅接受數字、#-()等符號"); jQuery.validator.addMethod("checkpwdhard", function( value, element ) { var str = value; var result = false; if(str.length > 0){ var patt = /^[a-zA-Z0-9]{6,20}$/; var result1 = patt.test(str); //先測試是否有英文 var pattEN = /[a-zA-Z]{1,}/; result2 = pattEN.test(str); //先測試是否有數字 var pattDigit = /[0-9]{1,}/; result3 = pattDigit.test(str); if(result1 == true && result2 == true && result3 == true){ result = true; } else{ result = false; } } else { result = true; } return result; }, "密碼為 6~20個字元的英文字母、數字混合,但不含空白鍵及標點符號。"); jQuery.validator.addMethod("checkname", function( value, element ) { var str = value; var result = false; if(str.length > 0){ //先測試是否有中文 var pattCH = /[\u4e00-\u9fa5]{1,}/; result1 = pattCH.test(str); //先測試是否有英文 var pattEN = /[a-zA-Z]{1,}/; result2 = pattEN.test(str); //檢查先生小姐 testa = str.search("先生"); testb = str.search("小姐"); //整段內容只接受 (英文或中文)或空白、dash、underline var pattSimbo = /^[\u4e00-\u9fa5a-zA-Z\-_\s]{1,}$/; result3 = pattSimbo.test(str); //整段內容是否有空白、dash、underline var pattHasSimbo = /[\-_\s]{1,}/; result4 = pattHasSimbo.test(str); if(result1 && result2){ // console.log('有中文也有英文'); result = false; } else { if(result1){ // console.log('有中文'); if(str.length >= 2){ // console.log('至少兩個字'); if(testa == -1 && testb == -1){ // console.log('沒有先生也沒有小姐'); if(result3){ // console.log('符號 合規則'); if(result4){ result = false; } else { result = true; } } else { // console.log('符號不合規則'); result = false; } } else { // console.log('有先生或小姐'); result = false; } } else { result = false; } } else { // console.log('沒有中文'); result = false; if(result2){ // console.log('有英文'); if(str.length >= 3){ if(result3){ // console.log('符號 合規則'); result = true; } else { // console.log('符號不合規則'); result = false; } } else { result = false; } } else { // console.log('沒有英文'); result = false; } } } } else { result = true; } return result; }, "姓名可為中文(最少兩字)或英文(最少三字),英文請勿使用除了空白、底線、DASH以外的符號");