2017-05-27 63 views
0

我想寫一個指令,通過ng字段的兩個字段,如移動代碼和手機號碼。正則表達式基於條件

我在哪裏拼接ngmodels和我在哪裏使用REGEX。

的條件等, 如果移動代碼是015x-的移動的總位數應嚴格12

如果移動代碼是01XX或01xxx - 然後的總位數將是11或12.

的代碼是:

angular.module('Validation').directive('mobileNumberValidator', function() { 
var MOBILE_NUMBER_REGX = /^(?:(?=015)[0-9]{12} | [0-9]{11,12})$/; 

return { 
    restrict: 'A', 
    require: 'ngModel', 
    scope: { 
     mobilecode: '=' 
    }, 

    link: function (scope, element, attrs, ngModel) { 
     dovalidation(); 
     element.bind('blur', function() { 
      scope.$apply(dovalidation); 
     }); 

     function dovalidation() { 
      ngModel.$validators.InvalidMobileNumber = function (modelValue, viewValue) { 

       var value = modelValue || viewValue; 
       var regexp = scope.mobilecode + value; 
       if (regexp.length !== 0) { 
        return MOBILE_NUMBER_REGX.test(regexp); 
       } 

      }; 
     } 
    } 

}; 
}); 

但如預期的正則表達式不起作用。 :(

回答

1

試試這個正則表達式:

/^((015\d{9})|(01[0-46-9]\d{8,9}))$/ 

這意味着:015 + 9等數字或01 +不是5個+ 8-9其他數字

+0

是什麼符號[0-46-9]是什麼意思?這是一個區間? – Khushi

+0

啊謝謝它的工作! – Khushi

+0

@Alamelu'[0-46-9]'意思是匹配__one字符___,它可以在__0到4__的範圍內,或者在__6到9__的範圍內。也可以是任何一個數字,但是5. – Olian04

0

生鏽的格局會的工作,但是這一個爲更好的(更快,更短):

Pattern Demo

/^01(?:[0-46-9]\d{8,9}|5\d{9})$/

  • 沒有捕捉組
  • 鞏固01開始
  • 把短替代模式第一
+0

它沒有像預期的那樣工作:(即使長度爲11的情況下觸發的錯誤015. – Khushi

+0

@Alamelu很好,謝謝你告訴我我的錯誤,現在已經修復。 – mickmackusa