我正在尝试针对个人ID文本字段中的两个同时模式评估字符串(图1):
此字段供用户输入他的个人西班牙语(DNI)或葡萄牙语(Cartãodecidadão)国家识别号,其目的是同时评估这两种模式,而不是关心语言环境集(网站是用西班牙语,英语和葡萄牙语。)
这些模式应该是:
/^[0-9]{8}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/i
(即12345678A)/^[0-9]{7,8}\[0-9]\([A-Z]|[0-9]){2}[0-9]$/
(即04521225)有了这个,表格的代码片段如下:
<input type="text" name="field_dni"
class="form-control form-control-400" id="field_dni"
ng-model="vm.form.dni"
ng-minlength=9
ng-maxlength=9
ng-pattern= "vm.verificarId" />
<div ng-show="verificarForm.field_dni.$invalid">
<p class="help-block"
ng-show="verificarForm.field_dni.$error.pattern"
translate="verificar.validation.pattern">The pattern entered is
incorrect
</p>
<p class="help-block"
ng-show="verificarForm.field_dni.$error.required"
translate="verificar.validation.required">This field is required.
/p>
<p class="help-block"
ng-show="verificarForm.field_dni.$error.minlength"
translate="verificar.validation.minlength">This field is required to
be exactly 9 characters long
</p>
<p class="help-block"
ng-show="verificarForm.field_dni.$error.maxlength"
translate="verificar.validation.maxlength">This field is required to
be exactly 9 characters long
</p>
如您所见,应该发生的是每个验证(长度和模式)都要进行评估。
相关的控制器代码段如下所示:
function ValidateController($scope, Principal, ValidateService, $state) {
var vm = this;
vm.verificarId= /^[0-9]{8}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/i|/^[0-9]{7,8}\[0-9]\([A-Z]|[0-9]){2}[0-9]$/;
这不起作用。这种模式似乎被忽略了。我试过在两个正则表达式条件之间加上括号,例如:
/(^[0-9]{8}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/i)|(/^[0-9]{7,8}\[0-9]\([A-Z]|[0-9]){2}[0-9]$)/
但抛出语法错误。 我设法让这部分工作的唯一方法是将一个regExp或另一个硬编码到ng-pattern组件中。但这并非最佳,因为两者都需要协同工作。
有没有更好的“Angularier”方式呢?我试图在regex101中再次重建正则表达式,但没有成功。
答案 0 :(得分:0)
我认为问题在于您在视图中使用vm。假设您在该视图中使用该控制器,则控制器范围是视图的范围,除非您使用别名
所以你应该使用ng-pattern= "verificarId"
ng-pattern= "vm.verificarId"
的实例