Perl Düzenli İfadeler bir MD5 Hash maç?

6 Cevap php

Son zamanlarda PHP programlama, ben çalışan bir Perl düzenli ifade vardı ama ben ne istediğini karşı kontrol ederken, bu işe yaramadı düşündüm.

Şey bir MD5 olup olmadığını kontrol etmek için doğru ifade nedir (32 haneli az şehrinden onaltılık ve 0-9) sahiptir.

Şu anda, /^[a-z0-9]{32}$/i var

6 Cevap

MD5:

/^[0-9a-f]{32}$/i

SHA-1:

/^[0-9a-f]{40}$/i

MD5 or SHA-1:

/^[0-9a-f]{32}(?:[0-9a-f]{8})?$/i

Ister i değiştirici bırakarak düşünebilirsiniz böylece Ayrıca, en sağlamalarının zaman, bir küçük onaltılık şekilde sunulmaktadır.


Bu arada, onaltılı tabanı 16 şu anlama gelir:

0  1  2  3  4  5  6  7  8  9  A   B   C   D   E   F  = base 16
0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15 = base 10

Eğer sadece 0'dan F, aynı şekilde ondalık (ya da tabanına 10) gider görebileceğiniz gibi Yani sadece 0-9 gider.

/^[a-f0-9]{32}$/i

MD5 genellikle onaltılık sayılar olarak ifade edilir sağlamalarının beri, biraz daha iyi çalışması gerekir.

POSIX karakter sınıfı da vardır xdigit (bkz: perlreref):

/^[[:xdigit:]]{32}$/

Peki, dikkate alınması gereken önemli bir nokta $ \n maç olmasıdır. Bu yüzden:

E:\> perl -e "$x = qq{1\n}; print qq{OK\n} if $x =~ /^1$/"
OK

Pardon!

Doğru ışık, bu nedenle,:

/^[[:xdigit:]]{32}\z/

Hatta daha kolay ve PHP tarafından tavsiye edilen RegEx'in daha hızlı Ctype Functions:

function is_md5($s){ return (ctype_xdigit($s) and strlen($s)==32); }

@ OP, böyle sha1 üretilen gibi, /[a-f0-9]{32,40}/, bu 32 daha büyük uzunlukta kontrol edebilirsiniz kullanmak isteyebilirsiniz.