2008-11-13 244 views
14

我使用這個簡單的正則表達式驗證一個十六進制字符串十六進制字符串:正則表達式驗證

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

正如你所看到的,我使用一個量詞,以驗證字符串是16個字符長。我想知道是否可以在同一個正則表達式中使用另一個量詞來驗證字符串長度是16還是18(不是17)。

回答

50

我相信

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

會工作。

這很好,因爲它推廣到任何長度均勻的字符串。

+0

我同意值得讚揚 – 2008-11-13 17:56:58

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

這只是一個帶有可選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

0

我大概用

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

自己去。我認爲將正則表達式設置爲不區分大小寫並且只列出一次字符範圍更具可讀性。這就是說,幾乎所有這些答案都有效。