2015-02-10 72 views
0

我試圖創建一個指令來檢測數字是否重複或不。
這裏是我的小提琴:http://jsfiddle.net/7htqdk7y/3/
但它不會工作,任何想法?檢測號碼重複或不在angularjs

指令

app.directive('validTel', function() { 
    return { 
     require: '?ngModel', 
     link: function (scope, element, attrs, ngModelCtrl) { 
      if (!ngModelCtrl) { 
       return; 
      } 

      ngModelCtrl.$parsers.push(function (val) { 
       var clean = val.replace(/[[email protected]]+/g, ''); 
       if (val !== clean) { 
        ngModelCtrl.$setViewValue(clean); 
        ngModelCtrl.$render(); 
        console.log('hey'); 
       } 
       return clean; 
      }); 

      element.bind('keypress', function (event) { 
       if (event.keyCode === 32) { 
        event.preventDefault(); 
       } 
      }); 
     } 
    }; 
}); 

的規則是,用戶不應該進入重複號碼,如:1111111111122222222222
注:我有控制像數的計數的其他指令:我 - maxlentgh='11'

回答

2

你想要的正則表達式是這一個:

(1){11,}|(2){11,}|(3){11,}|(4){11,}|(5){11,}|(6){11,}|(7){11,}|(8){11,}|(9){11,}|(0){11,} 

這意味着:

digit 1: 11 or more times 
    or 
digit 2: 11 or more times 
    etc... 

(\d){11,} 

將意味着:有十位數以上字符串中的

+0

我應該如何在指令中使用它? – sani 2015-02-10 11:13:16

+0

var clean = val.replace(/(1){11,} |(2){11,} |(3){11,} |(4){11,} |(5){11,} |( 6){11,} |(7){11,} |(8){11,} |(9){11,} |(0){11,}/g,'')會擦除重複的數字11次或更多,如果這是什麼你的意思要做 – Manube 2015-02-10 11:22:20

+0

不,我不想刪除正常的數字,如:1234569878或02122411689這些都沒問題但是111111111111這些都不是 – sani 2015-02-10 11:28:19

1

似乎你得到了錯誤的正則表達式。嘗試

var clean = var clean = val.replace(/[[email protected]]+/gi, '').replace(/(((\d){11,11})(\3)*)/g, '$2'); 

這裏是修改後的小提琴:http://jsfiddle.net/7htqdk7y/4/

第二替代被重複限制位數以上,然後11倍 - 這條,其出該範圍內的數字的所有重複。

我覺得這比接受的答案更好的解決辦法,因爲重複的比賽並不完全取代,而只是說我們不允許

部分見Regex to find repeating numbers

+0

它不工作正常數字 – sani 2015-02-10 11:12:13

+0

感謝您的反饋意見。編輯版本應該現在工作 – Benjamin 2015-02-10 12:20:58

+0

我不知道哥們,測試它 – sani 2015-02-10 13:31:54