[英]Perl Regular Expressions to match a MD5 Hash?
最近用PHP編程,我以為我有一個有效的Perl正則表達式但是當我按照我想要的方式檢查它時,它沒有用。
什么是正確的表達式來檢查某個東西是否是MD5(32位十六進制的az和0-9)。
目前,我有/^[a-z0-9]{32}$/i
MD5:
/^[0-9a-f]{32}$/i
SHA-1:
/^[0-9a-f]{40}$/i
MD5 或 SHA-1:
/^[0-9a-f]{32}(?:[0-9a-f]{8})?$/i
此外,大多數哈希值始終以小寫十六進制方式呈現,因此您可能需要考慮刪除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
因此,您可以看到它僅從0到F,十進制(或基數10)的相同方式僅從0到9。
/^[a-f0-9]{32}$/i
應該工作得更好,因為MD5哈希通常表示為十六進制數。
還有POSIX字符類xdigit
(參見perlreref ):
/^[[:xdigit:]]{32}$/
好吧,需要考慮的重點是$
可以匹配\\n
。 因此:
E:\> perl -e "$x = qq{1\n}; print qq{OK\n} if $x =~ /^1$/" OK
哎呀!
因此,正確的模式是:
/^[[:xdigit:]]{32}\z/
比PHP Ctype函數推薦的更容易和更快的RegEx:
function is_md5($s){ return (ctype_xdigit($s) and strlen($s)==32); }
@OP,您可能想要使用/[a-f0-9]{32,40}/
,這可以檢查大於32的長度,例如從sha1生成的長度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.