我试图评估在个人ID文本字段对两个同步模式的字符串(图1):是否可以在AngularJS中使用双正则表达式(正则表达式)计算字符串?
此字段供用户输入他的个人西班牙语(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>
正如你所看到的,wha吨应该发生的是,每一个验证(长度和模式)进行评估。
的相关负责人片段看起来是这样的:
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或另一个regExp硬编码到ng模式组件中。但这不是最佳的,因为两者都需要共同努力。
是否有这样做的更好,“Angularier”的方式?我试图在regex101中重新构建正则表达式,但没有成功。
尝试'/^([0-9] {8} [trwagmyfpdxbnjzsqvhlcketTRWAGMYFPDXBNJZSQVHLCKET] | [0-9] {7,8} \ [0-9] \([AZ] | [0-9]){2} [0-9 ])$ /;' –
嗨Wiktor的,感谢您的评论, 只是想你的正则表达式,并得到了这一点: '无效的正则表达式:/ ^([0-9] {8} [trwagmyfpdxbnjzsqvhlcketTRWAGMYFPDXBNJZSQVHLCKET ] | [0-9] {7,8} \ [0-9] \([AZ] | [0-9]){2} [0-9])$ /:Unmatched') '' 狩猎这个流氓括号,我设法得到第一个条件工作(12345678A),但不是第二个。似乎是一个语法问题。 – wickedchild
我刚刚复制你的。所以,在你身边找一个问题。也许你的第二个是['^ [0-9] {7,8} [0-9] [A-Z0-9] {2} [0-9] $'](https://regex101.com/ R/FrA28c/1)?那么你的正则表达式应该像['^([0-9] {8} [trwagmyfpdxbnjzsqvhlcketTRWAGMYFPDXBNJZSQVHLCKET] | [0-9] {7,8} [0-9] [A-Z0-9] {2} [0- 9])$'](https://regex101.com/r/ONPHJl/1)。不要从注释中复制粘贴,因此为了更好的外观,将垃圾字符插入这些文本中。 –