2015-12-09 45 views
0

我正在使用以下指令來製作僅用於輸入文本框的數字。但是,我應該如何更改正則表達式,以便它只允許輸入1到12之間的數字(包括兩者)。有效月份的正則表達式

(function() { 
    "use strict"; 
    angular 
    .module("xyz") 
    .directive('numericOnly', function() { 
     return { 
      require: 'ngModel', 
      link: function (scope, element, attr, ngModelCtrl) { 
       function fromUser(text) { 
        if (text) { 
         var transformedInput = text.replace(/[^0-9]/g, ''); 
         if (transformedInput !== text) { 
          ngModelCtrl.$setViewValue(transformedInput); 
          ngModelCtrl.$render(); 
         } 
         return transformedInput; 
        } 
        return undefined; 
       } 
       ngModelCtrl.$parsers.push(fromUser); 
      } 
     }; 
    }) 
}()); 

回答

4

您可以使用以下正則表達式:

^(1[012]|[1-9])$ 

這也實際上是兩個正則表達式是管道(或)。第一個匹配10-12,第二個匹配1-9。總計1-12

+2

添加前導零'^(1 [012] | 0 [1-9]?)$'是允許月份被指定爲'01','02',這可能會有幫助 – nomail

+0

我不會解釋作爲*它實際上有兩個正則表達式是管道(或)*。 '|'是一個交替操作符,用於分隔*替代子模式*。 –

+0

但是,我需要否定在text.replace中使用的表達式(Negative_pattern,'')。我怎樣才能否定這種模式? 我正在使用(?!^(1 [012] | [1-9])$)但它不起作用。 – CodeZila