我正在使用此正则表达式来验证输入的密码。密码至少需要1个大写字母、1个数字和1个符号:
/(?=.*?\d)(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^a-zA-Z\d])/
我在 type="password"
输入中使用 RegEx 和 ng-pattern
。输入 Mike123@
或 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>
我该如何解决这个问题?
最佳答案
来自示例。
“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>
关于javascript - AngularJS - 无效的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46640841/