45

値がこのコードによって生成されたUUID4と等しいことを検証するにはどうすればよいですか?

uuid.uuid4().hex

正規表現でしょうか?この形式の32文字の長さの文字列から生成される値:

60e3bcbff6c1464b8aed5be0fce86052
4

4 に答える 4

123

私の知る限り、Martijn の答えは 100% 正しいわけではありません。UUID-4 には 16 進文字の 5 つのグループがあり、最初は 8 文字、2 番目は 4 文字、3 番目は 4 文字、4 番目は 4 文字、5 番目は 12 文字です。

ただし、有効な UUID4 にするためには、3 番目のグループ (中央のグループ) を 4 で開始する必要があります。

00000000-0000-4000-0000-000000000000
              ^

4 番目のグループは、8、9、a、または b で始まる必要があります。

00000000-0000-4000-a000-000000000000
              ^    ^

したがって、Martijn の正規表現を次のように変更する必要があります。

import re
uuid4hex = re.compile('[0-9a-f]{12}4[0-9a-f]{3}[89ab][0-9a-f]{15}\Z', re.I)

お役に立てれば!

于 2013-08-21T13:40:17.757 に答える
24

簡単です:

import re
uuid4hex = re.compile('[0-9a-f]{32}\Z', re.I)

このメソッドを使用する場合、これは正確に32 個の 16 進数文字である文字列にのみ一致します.match()(文字列の先頭から検索します。vs. を参照してください.search()).match()。は文字列の\Z末尾に一致します ($文字列または改行の末尾に一致するのに対して)。

于 2012-07-08T16:10:30.800 に答える