我想要一个正则表达式,它可以是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