2017-05-08 11 views
3

我是angular/javascript的新手,需要一個正則表達式,它應該允許一個字符串可選地帶有空格的兩個字符串。總共最多10個字符。字符串的正則表達式可選地被一個空格分隔

有效的字符串: 「ASDF」 「ASDF ASDF」

我已經試過類似:^ [?[AZ] {1,10} [AZ] {2,9}] {1, 10}?$,但無法使其工作

回答

2

量詞只修改它們所處的原子(子模式)的行爲。此外,你的正則表達式被「毀了」,因爲你把所有的子模式序列放入一個字符類。

您可以使用

/^(?!.{11})[a-z]+(?: [a-z]+)?$/ 

regex demo

如果字符可以是任何非空白字符,與\S更換[a-z]

說明

  • ^ - 串
  • (?!.{11})開始 - 返回敵不過如有11個字符的字符串中(這種消極的前瞻將工作一樣(?=.{1,10}$)開始發現 - 任何1到10個字符到字符串結尾)
  • [a-z]+ - 1+小寫字母(用您真正允許的內容替換)
  • (?: [a-z]+)? - 1或0的出現:
    • - 空間(可以與\s代替)
    • [a-z]+ - 1+小寫字母(什麼你真的允許替換)
  • $ - 結束字符串。
+0

謝謝!除了我能夠在字符串之後輸入多個空格之外,您的模式對我來說很好,除此之外 –

+0

實際上,當我在https://regex101.com上測試時,模式正常工作,但空白空間問題發生在我使用它的形式 –

+1

您可以添加'ng-trim =「false」'。 –

2

我想你不必檢查正則表達式中的第二個標準(總共最多10個字符)。如果有一把錘子,他不必到處使用它。相反,它通過length屬性檢查字符串的長度很簡單直接。

s = 'asdf asdf' 
/^\w+(\w+)?$/.test(s) && s.length <= 10 
+0

我已經考慮過了,但我認爲如果可能的話,我寧願使用正則表達式,因爲我在幾個地方將它重用爲常量 –

+0

@MartinNilsson您也可以將它包裝到函數中並重用它。 – gzc

+0

我已經以相同的方式使用了多個相似的模式,所以如果我可以避開它,我仍然更喜歡正則表達式解決方案 –

相關問題