1 <script type="text/javascript"> 2 3 var lastState = false; 4 5 var regExp = /^[1-9]\d*((-[1-9]\d*,[1-9]\d*)*-[1-9]\d*)?$/; 6 var str = "1-9,2-10"; 7 if(regExp.test(str)){ 8 var newStr = str.split(',') 9 var newArr = []; 10 for(var i = 0; i < newStr.length;i++){ 11 var littleStr = newStr[i].split('-'); 12 if(littleStr[0] >= littleStr[1]){ 13 console.log('第一位比第二位長') 14 lastState = false; 15 break; 16 } 17 else{ 18 var len = littleStr[1] - littleStr[0] + 1; 19 for(var j= 0;j<len;j++){ 20 newArr.push(littleStr[0]); 21 littleStr[0]++; 22 } 23 lastState = true; 24 } 25 } 26 if(lastState){ 27 var newLen = newArr.length; 28 var lastArr = newArr.sort() 29 for(var i = 0;i<newLen;i++){ 30 if(lastArr[i] == lastArr[i+1]){ 31 console.log('有交集') 32 lastState = false; 33 break; 34 } 35 lastState = true; 36 } 37 } 38 39 } 40 else{ 41 console.log('正則匹配沒過') 42 } 43 console.log(lastState) 44 45 </script>
感受這是我寫過的最複雜的一個邏輯了,很完美,很浪費腦子,頭疼ingjavascript
1 /^([1-9]\d*|[1-9]\d*-[1-9]\d*)(,([1-9]\d*|[1-9]\d*-[1-9]\d*))*([1-9]\d*)?$/
這是一個最完美的正則,考慮到的狀況有1,2,3 1,2-3,4-5,6 1-2,3-4,5-6 1 1-3java
下面有作的就是將這裏封裝成一個函數,並返回對應的錯誤信息,很完美函數
還要考慮的狀況是判斷若是是1-9的話,第一位要小於第二位,而且,裏面的數字不能有重複的,太精彩了spa
1 <script type="text/javascript"> 2 var val = "1-2,3"; 3 console.log(zhuangCheck(val)) 4 5 function zhuangCheck(val) { 6 var exp = /^([1-9]\d*|[1-9]\d*-[1-9]\d*)(,([1-9]\d*|[1-9]\d*-[1-9]\d*))*([1-9]\d*)?$/ 7 if (exp.test(val)) { 8 var arr = val.split(','); 9 var arrLen = arr.length; 10 var newArr = []; 11 var flag = true, 12 msg = ''; 13 for (var i = 0; i < arrLen; i++) { 14 if (arr[i].indexOf('-') != -1) { 15 var littleArr = arr[i].split('-'); 16 if (Number(littleArr[0]) >= Number(littleArr[1])) { 17 flag = false; 18 msg = '第一位不能大於第二位'; 19 break; 20 } else { 21 var newLen = littleArr[1] - littleArr[0] + 1; 22 for (var j = 0; j < newLen; j++) { 23 newArr.push(Number(littleArr[0])) 24 littleArr[0]++; 25 } 26 } 27 28 } else { 29 newArr.push(Number(arr[i])) 30 } 31 } 32 if (flag) { 33 var sortArr = newArr.sort(); 34 var sortLen = sortArr.length; 35 for (var i = 0; i < sortLen; i++) { 36 if (sortArr[i] == sortArr[i + 1]) { 37 msg = '有重複' 38 break; 39 } 40 } 41 } 42 } else { 43 msg = '清填寫正確的格式' 44 } 45 return msg; 46 } 47 </script>
這是最完美的格式,wonderfulcode
var regExp = /^[1-9]\d*([1-9]\d|\d[1-9])$/blog
驗證房號的正則ip
var regExp = /^\d*((\.\d*)*)?$/;版本號正則,第一次遇到使用.的,官網的解釋是匹配除了\n以外的任意單個字符,不知道到底咋哪裏會使用到,先記下吧