2017-05-27 54 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