2017-10-09 58 views
1

我正在使用此RegEx驗證輸入的密碼。密碼需要有至少1個英文大寫字母,1號和1個符號:AngularJS - 無效的正則表達式

/(?=.*?\d)(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^a-zA-Z\d])/ 

我在type="password"輸入使用正則表達式與ng-pattern一起。當輸入[email protected]Mike123*時,它工作正常。但是,在進入Mike123***時引發以下錯誤:

SyntaxError: Invalid regular expression: /^Mik123***$/: Nothing to repeat 

正則表達式正常工作在這裏:https://regex101.com/r/j0O4aw/1。代碼在哪裏被使用:

<div class="input_fieldholder"> 
    <input type="password" 
    class="m-b-0 login_typefield" 
    placeholder="Password" 
    name="password" 
    ng-class="{ form_error: vm.formObject.password.$dirty && vm.formObject.password.$invalid }" 
    ng-model="vm.password" 
    ng-minlength="6" 
    ng-change="vm.onChangePassword()" 
    ng-pattern="/(?=.*?\d)(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^a-zA-Z\d])/" 
    required 
    ng-attr-autofocus="{{ vm.autoFocus }}"> 

    <div class="text-left m-t-3"> 
    <div ng-show="vm.formObject.password.$dirty && vm.formObject.password.$error.required" class="text-danger">{{ 'PASSWORD_REQUIRED_VALIDATION' | translate }}</div> 
    <div ng-show="vm.formObject.password.$dirty && vm.formObject.password.$error.minlength" class="text-danger">{{ 'PASSWORD_LENGTH_VALIDATION' | translate }}</div> 
    <div ng-show="vm.formObject.password.$dirty && vm.formObject.password.$error.pattern" class="text-danger">{{ 'PASSWORD_PATTERN_VALIDATION' | translate }}</div> 
    </div> 
</div> 

<div class="input_fieldholder"> 
    <input type="password" 
    class="m-t-10 m-b-0 login_typefield" 
    placeholder="Confirm Password" 
    name="confirmPassword" 
    ng-class="{ form_error: vm.formObject.confirmPassword.$dirty && vm.formObject.confirmPassword.$invalid }" 
    ng-model="vm.confirmPassword" 
    ng-pattern="vm.password" 
    ng-change="vm.onChangePassword()" 
    required 
    compare-field-selector="[name='password']"> 
    <div class="text-left m-t-3"> 
    <span ng-show="vm.formObject.confirmPassword.$dirty && vm.formObject.confirmPassword.$invalid" class="text-danger">{{'PASSWORD_CONFIRM_VALIDATION' | translate }}</span> 
    </div> 
</div> 

我應該如何解決這個問題?

+2

你一定反轉模式和字符串中搜索 –

+1

@GaétanRYCKEBOER是正確的!你得到的錯誤真的表明,輸入的密碼確實被視爲匹配的正則表達式......我不知道角... ng模式來自框架還是你使用onChangePassword()?對於後者,您需要向我們顯示代碼,以便我們可以指出問題所在。 – Salketer

+0

'ng-pattern =「vm.password」',這是confirmPassword輸入字段中的問題。這是沒有必要的,並刪除它的工作。謝謝你們的幫助。 – abhim

回答

0

從示例中。

id=regex」包含匹配的正則表達式。 「id=input」包含用於檢查正則表達式的字符串。

<script> 
    angular.module('ngPatternExample', []) 
    .controller('ExampleController', ['$scope', function($scope) { 
    $scope.regex = '\\d+'; 
    }]); 
</script> 

其次:

<div ng-controller="ExampleController"> 
<form name="form"> 
    <label for="regex">Set a pattern (regex string): </label> 
    <input type="text" ng-model="regex" id="regex" /> 
    <br> 
    <label for="input">This input is restricted by the current pattern: 
    </label> 
    <input type="text" ng-model="model" id="input" name="input" ng-pattern="regex" /><br> 
    <hr> 
    input valid? = <code>{{form.input.$valid}}</code><br> 
    model = <code>{{model}}</code> 
</form> 
</div>