2017-08-21 83 views
2

我實際上得到了一個有角度的形式和一些內部輸入。目的是在雲中上傳文件。所以,我得到了一個可能包含一些子目錄的目錄路徑的輸入。所以我得到了一個像這樣的範圍內的JS的正則表達式:$scope.regex = "^[^\/]\S+$";ng-pattern/ng-show AngularJS

這個正則表達式將接受任何字符,如果它的第一個字符不是「/」。

,這裏是我的角度代碼:

<input name="directory" id="directory" type="text" class="form-control" ng-pattern="regex" ng-model="directoryName" placeholder="Enter a directory name"/>

<span class="error" ng-show="uploaderForm.directory.$error.pattern">directory path can't start by a "/"</span>

通常情況下,這個正則表達式,這條路應該是成功的:

directory/subdirectories/filename... 

,這一次不應該:

/directory/subdirectories/filename... 

但我的問題是,當我正在寫東西,如:測試/分測驗/ blablabla,我得到了NG-顯示錯誤...

注意,我的輸入也可以是單個字符,像a

+0

如果您使用'$ scope.regex =「^ [^ /] \\ S + $」;'? –

+0

我不是在ng-pattern =「regex」中使用它嗎? – Cupkek05

+0

不,你有'\ S'。你必須加倍反斜槓。 –

回答

1

使用

$scope.regex = "^[^/]\\S*$"; 

或等值的正則表達式的文字符號:

$scope.regex = /^[^\/]\S*$/; 

第一個問題的解決,是反斜槓加倍。要在JS字符串文字中定義文字\,您需要將其加倍。見this thread

第二個問題通過用*(0或更多)量詞替代+(1或更多)來解決。 \S+匹配一個或多個非空白字符,並且\S*將匹配除空格以外的零個或多個字符。

詳細

  • ^ - 零個或多個非空白字符
  • $ - - 字符串的結尾比/
  • \S*其他任何字符 - 字符串
  • [^\/]的開始。

萬一你還想允許一個空字符串,你可以使用一個基於超前的正則表達式:

$scope.regex = /^(?!\/)\S*$/; 

這裏,(?!\/)是負先行,如果第一個字符是會失敗的比賽/

+0

不會使用雙反斜槓實際上匹配''''字面上跟一個'S'? – CinCout

+0

@CinCout:不,請參閱https://stackoverflow.com/questions/17863066/why-do-regex-constructors-need-to-be-double-escaped –

+0

啊。構造函數得到一個'string'。完美 – CinCout