2016-05-07 120 views
0

如何這兩正則表達式angularjs表單字段結合兩個正則表達式angularjs表單字段

\d{4}([- ]*)\d{6,7} 

OR

[a-zA-Z0-9]{4,12} 

結合我試過這樣

<input type="text" pattern="\d{4}([- ]*)\d{6,7} | [a-zA-Z0-9]{4,12}" class="form-control" ng-model="formData.username" required placeholder="username"> 
+0

對不起,我試過,但沒有奏效 – gaurav

+0

你能提供一些樣本字符串來測試嗎?你的模式怎麼沒有工作?它匹配什麼/不匹配?另外,'pattern'是一個HTML5屬性,你不能在'|'周圍有空格。你可以用'ng-pattern =「/ ^(\ d {4}([ - ] *)\ d {6,7} | [a-zA-Z0-9] {4,12})$/' –

+0

所以,問題只是一個錯字,那2個空格? –

回答

1

爲了得到2個正則表達式的替代方法,您需要將它們都包括在圓括號中:

<input type="text" pattern="(\d{4}([- ]*)\d{6,7})|([a-zA-Z0-9]{4,12})" class="form-control" ng-model="formData.username" required placeholder="username"> 
+0

這是我的錯誤,所以第二個正則表達式完全違反了第一個正則表達式。所以我這樣做:'(\ d {4}([ - ] *)\ d {6,7})|([a-zA-Z] {4,12})' – gaurav

+0

感謝您的幫助修復了我問題 – gaurav

+0

一個人不必將替代分支分別放到捕獲組中,唯一的問題就是'|'周圍的2個空格。 'pattern =「\ d {4} [ - ] * \ d {6,7} | [a-zA-Z0-9] {4,12}」'也應該有效。 –

0

問題是角使用單管道符號作爲過濾器,並且您不允許在模板中使用它。通常情況下會是一個二進制或,但你的情況下,也可能有問題...

所以你能做的就是創造它握着你的模式,並在模板中使用的變量在控制器上的變量是什麼:

<input type="text" ng-pattern="myctrl.pattern" class="form-control" ng-model="formData.username" required placeholder="username">