我試圖評估在個人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)。不要從註釋中複製粘貼,因此爲了更好的外觀,將垃圾字符插入這些文本中。 –