2017-05-27 4 views
0

Ich versuche, eine Direktive zu schreiben, die das NG-Modell von zwei Feldern, wie Handy-Code und Handynummer, übergibt.Regex Basierend auf den Bedingungen

Wo ich die ngmodels concating bin und wo ich ein REGEX verwende.

Die Bedingungen sind wie, Wenn der mobile Code ist 015x- die Gesamtzahl der mobilen Ziffern 12 streng

Wenn der mobile Code 01xx oder 01xxx ist sein sollte - dann ist die Gesamtzahl der Stellen wird 11 sein oder 12.

der Code ist:

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); 
       } 

      }; 
     } 
    } 

}; 
}); 

Aber die RegEx nicht wie erwartet funktionieren. :(

Antwort

1

diese regex Versuchen:

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

Es bedeutet:. 015 + 9 weitere Ziffern oder 01 + nicht ein 5 + 8-9 andere Ziffern

+0

Was bedeutet die Notation [0-46-9] bedeuten? Ist das ein Intervall? – Khushi

+0

Ah danke es hat funktioniert !!! – Khushi

+0

@Alamelu '[0-46-9]' bedeutet, passen Sie __ ein Zeichen__ an, das entweder im Bereich von __0 bis 4__ oder im Bereich von __6 bis 9__ liegt. Aka eine beliebige Nummer aber 5. – Olian04

0

Rusty Muster funktionieren wird, aber diese ein ist besser (schneller, kürzer):

Pattern Demo

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

  • keine Einfanggruppen
  • konsolidieren 01 Start
  • setzen kürzere Alternative Muster zuerst
+0

Es hat nicht wie erwartet funktioniert :(Der Fehler ausgelöst, auch wenn die Länge 11 incase von 015 ist. – Khushi

+0

@Alamelu Ganz richtig, danke für die Anzeige meines Fehlers. Es ist jetzt behoben. – mickmackusa

Verwandte Themen