我想要一個正則表達式,它可以是X或Y字符長度。例如,匹配長度爲8或11個字符的字符串。我目前已經實現了這樣的:^([0-9]{8}|[0-9]{11})$
。匹配特定長度x或y
我還可以實現它:^[0-9]{8}([0-9]{3})?$
我的問題是:我能有這樣的正則表達式,而不復制[0-9]
部分(這是更復雜的比這個簡單的例子\d
)?
我想要一個正則表達式,它可以是X或Y字符長度。例如,匹配長度爲8或11個字符的字符串。我目前已經實現了這樣的:^([0-9]{8}|[0-9]{11})$
。匹配特定長度x或y
我還可以實現它:^[0-9]{8}([0-9]{3})?$
我的問題是:我能有這樣的正則表達式,而不復制[0-9]
部分(這是更復雜的比這個簡單的例子\d
)?
還有一種方法:
^(?=[0-9]*$)(?:.{8}|.{11})$
或另外,如果你想先做長度檢查,
^(?=(?:.{8}|.{11})$)[0-9]*$
這樣,你只需要複雜的部件一次,而且通用的.
用於長度檢查。
說明:
^ # Start of string
(?= # Assert that the following regex can be matched here:
[0-9]* # any number of digits (and nothing but digits)
$ # until end of string
) # (End of lookahead)
(?: # Match either
.{8} # 8 characters
| # or
.{11} # 11 characters
) # (End of alternation)
$ # End of string
對於我們這些希望捕捉相同的多個不同長度的嘗試。
^(?:[0-9]{32})+$
哪裏32
是要捕捉所有的長度(32,64,96,......)的倍數。
非常好...我將不得不更多地瞭解這些lookaheads :) – Laoujin
請注意:如果您採用'^(?= [0-9] * $)(?:。{8} |。{11} )$'版本,這可能是IE5-8的錯誤,正如解釋[這裏](http://blog.stevenlevithan.com/archives/regex-lookahead-bug)。切換到蒂姆的替代版本,它適用於所有瀏覽器。 – Laoujin
注意由於非捕獲組(?:),XML模式不支持這兩個版本。 – user1056903