2016-01-04 74 views
4

ng-pattern中,我們可以選擇指定該字段應該匹配特定模式。ng-pattern應該與提供的模式不匹配

我們如何指定它不符合指定的模式?

實施例,

<input type="text" ng-pattern="/[*|\":<>[\]{}`()';@&$]/" /> 

在這裏,我不想字段匹配的模式。相反,如果模式匹配,我想顯示錯誤。

+0

你想使用相同的模式?如果是的話,你需要創建一個自定義驗證器。如果沒有,則可以使用['^(?:(?![* | \ x22:<> \ [\] {} \'()'; @&$])。)* $'](https:/ /regex101.com/r/nN8uK7/1),我想。 –

+0

看起來像[那個問題](http://stackoverflow.com/questions/406230/regular-expression-to-match-line-that-doesnt-contain-a-word)我鏈接到沒有其他正則表達式I在我的評論中顯示。我想我應該重新提出這個問題。 –

回答

1

爲了檢查一個字符串沒有一些子,你可以使用一個字符串,啓動固定前瞻:

/^(?!.*[*|\x22:<>[\]{}`()';@&$])/ 

參見demo

在AngularJS,圖案不必匹配整個字符串如果一個正則表達式對象傳遞(噸他與分隔符),所以這個正則表達式很適合當前的目的(只是檢查一個條件是真是假)。

請注意,也可以使用常用的回火貪婪標記解決方案^(?:(?![*|\x22:<>\[\]{}`()';@&$]).)*$(請參見demo),但由於檢查了輸入字符串中的每個位置,效率較低。

此外,使用\x22來匹配ng-pattern值中的雙引號也很方便。

2

你可以使用一個負環視((?!pattern))來否定你的正則表達式:

ng-pattern="/(?![*|\":<>[\]{}`()';@&$])/" 
+0

這不起作用。這裏是[測試](https://regex101.com/r/hK7zK7/1)。前瞻不匹配字符串中的任何位置,它將在當前位置之後立即匹配。 '/ [* | \「:<> [\] {} \'()'; @&$] /'匹配字符類中的任何符號,相反應該確保整個字符中沒有這樣的符號正確的正則表達式是'/^(?!.*[* | \「:<> [\] {} \'()'; @&$])/'。 –

+0

@stribizhev,爲什麼? –

+0

stribizhev的正則表達式工作。 –