房号,幢正则

 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>

感觉这是我写过的最复杂的一个逻辑了,很完美,很浪费脑子,头疼ing

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-3

下面有做的就是将这里封装成一个函数,并返回对应的错误信息,很完美

还要考虑的情况是判断如果是1-9的话,第一位要小于第二位,并且,里面的数字不能有重复的,太精彩了

 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>

这是最完美的格式,wonderful

var regExp = /^[1-9]d*([1-9]d|d[1-9])$/

验证房号的正则

var regExp = /^d*((.d*)*)?$/;
版本号正则,第一次遇到使用.的,官网的解释是匹配除了 之外的任意单个字符,不知道到底咋哪里会使用到,先记下吧
原文地址:https://www.cnblogs.com/wrestle-mania/p/6934513.html