Perl正则表达式匹配MD5哈希?

Eri*_*tes 9 php regex validation perl md5

最近用PHP编程,我以为我有一个有效的Perl正则表达式但是当我按照我想要的方式检查它时,它没有用.

什么是正确的表达式来检查某个东西是否是MD5(32位十六进制的az和0-9).

目前,我有 /^[a-z0-9]{32}$/i

Ali*_*xel 34

MD5:

/^[0-9a-f]{32}$/i
Run Code Online (Sandbox Code Playgroud)

SHA-1:

/^[0-9a-f]{40}$/i
Run Code Online (Sandbox Code Playgroud)

MD5 SHA-1:

/^[0-9a-f]{32}(?:[0-9a-f]{8})?$/i
Run Code Online (Sandbox Code Playgroud)

此外,大多数哈希值始终以小写十六进制方式显示,因此您可能需要考虑删除i修饰符.


顺便说一句,十六进制表示基数16:

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
Run Code Online (Sandbox Code Playgroud)

因此,您可以看到它仅从0到F,十进制(或基数10)的相同方式仅从0到9.


Mik*_*l S 13

/^[a-f0-9]{32}$/i
Run Code Online (Sandbox Code Playgroud)

应该工作得更好,因为MD5哈希通常表示为十六进制数.


too*_*lic 9

还有POSIX字符类xdigit(参见perlreref):

/^[[:xdigit:]]{32}$/
Run Code Online (Sandbox Code Playgroud)


Sin*_*nür 5

那么,需要考虑的重点是$可以匹配的事实\n.因此:

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

哎呀!

因此,正确的模式是:

/^[[:xdigit:]]{32}\z/
Run Code Online (Sandbox Code Playgroud)