正则表达式验证

问题描述:

我使用这个简单的正则表达式验证一个十六进制字符串十六进制字符串:正则表达式验证

^[A-Fa-f0-9]{16}$ 

正如你所看到的,我使用一个量词,以验证字符串是16个字符长。我想知道是否可以在同一个正则表达式中使用另一个量词来验证字符串长度是16还是18(不是17)。

我相信

^([A-Fa-f0-9]{2}){8,9}$ 

会工作。

这很好,因为它推广到任何长度均匀的字符串。

+0

我同意值得赞扬 – 2008-11-13 17:56:58

^(?:[A-Fa-f0-9]{16}|[A-Fa-f0-9]{18})$ 

这只是一个带有可选2字符16个字符的要求算账:

^[A-Fa-f0-9]{16}([A-Fa-f0-9]{2})?$ 

括号可能并不需要 - 我没有足够的正则表达式大师知道副手,我害怕。如果有人想编辑它,不要随意...

+0

从性能角度来看,这是*很多*更好。不匹配时回溯少得多。 +1 – Tomalak 2008-11-13 17:58:34

+0

这里需要括号。如果你忽略它们,那么?使{2}懒惰,这在这里没有效果。 – 2008-11-14 10:05:57

我大概用

/^[a-f0-9]{16}([a-f0-9]{2})?$/i 

自己去。我认为将正则表达式设置为不区分大小写并且只列出一次字符范围更具可读性。这就是说,几乎所有这些答案都有效。