初め、
sha1ハッシュをすべて数字または文字にすることは可能ですか?
2つ目は、正規表現を使用してsha 1ハッシュをチェックするときに、開始区切り文字と終了区切り文字が必要なことです。
/^[0-9a-f]{40}$/i
代わりに
/[0-9a-f]{40}/i
デリメータを使用する必要はありますか?
パターンに少なくとも1つの数字と少なくとも1つの文字があるかどうかを確認する必要がありますか、それとも問題ではありませんか?
sha1 ハッシュは、すべて 0 とすべて 1 の間の 160 ビット値です。これは、はい、理論的にはすべて数字またはすべて文字にすることができることを意味します (より具体的には、16 進数表現にすることができます)。
開始マーカーと終了マーカーに関しては、他の方法で文字列をチェックしない限り、それらは必須です。投稿した 2 つのパターンは同等ではありません。
/^[0-9a-f]{40}$/i
0-9 または af の 40 文字のみで構成される文字列。
/[0-9a-f]{40}/i
0 ~ 9 または af の 40 文字が連続して含まれる文字列。
つまり、最初のパターンはこれを無効と見なしますが、2 番目のパターンはそうではありません。
|0000000000000000000000000000000000000000|
2 番目のパターンは、中央の 40 文字の有効な文字に一致し、残りは気にしません。
strlen
文字列が正確に 40 文字であることも確認するために使用した場合、2 番目のパターンを最初のパターンに効果的に変えることができます。ただし、基本的に次のパターンがあるため、これは少し冗長になります。
(0 から 9 までの 40 文字または連続する af を含む) および (ちょうど 40 文字) の文字列。
最初のバージョンはよりコンパクトに表現されていますが、2 番目のバージョンはもう少し明白です。