Php 要匹配md5哈希的正则表达式
应该使用什么类型的正则表达式来匹配md5哈希 如何验证此类字符串Php 要匹配md5哈希的正则表达式,php,regex,match,Php,Regex,Match,应该使用什么类型的正则表达式来匹配md5哈希 如何验证此类字符串00236a2ae558018ed13b5222ef1bd987 我试过这样的方法:('/^[a-z0-9]/'),但不起作用 如何做到这一点?谢谢这是一个与MD5哈希匹配的PCRE: define('R_MD5_MATCH', '/^[a-f0-9]{32}$/i'); if(preg_match(R_MD5_MATCH, $input_string)) { echo "It matches."; } else {
00236a2ae558018ed13b5222ef1bd987
我试过这样的方法:('/^[a-z0-9]/')
,但不起作用
如何做到这一点?谢谢这是一个与MD5哈希匹配的PCRE:
define('R_MD5_MATCH', '/^[a-f0-9]{32}$/i');
if(preg_match(R_MD5_MATCH, $input_string)) {
echo "It matches.";
} else {
echo "It does not match.";
}
尝试:
如果您收到一个字符串,并且希望将其验证为md5,只需检查长度32和字符a-f0-9。所谓“验证”,您的意思是任何仅包含有效十六进制数字的32个字符的字符串都将通过吗?例如,[[:xdigit:]
和重复的{32}
包含在开始和结束标记中。f
字母是问题所在。感谢这个问题的简单性-谷歌上的搜索结果恰好是这个网站上的重复。。。一般的经验法则是:如果你得到了一个即时的答案,你可能没有在这个问题上投入足够的精力。小心使用大写字母的散列。大写和小写都有效,因此删除其中一个是不正确的。正则表达式应该是这样的:'/^[a-fA-F0-9]{32}$/i'
。干杯。@el.nicko我正在努力理解…既然正则表达式包含了不区分大小写的I
,为什么同时指定a-f
和a-f
?你有任何关于你的观点的备份/扩展链接吗?@el.nicko这没关系,因为它有i
修饰符。之所以只有小写,而不是两者都有,是因为i
modifier.ACK,这里有一个要点。在问题和给定答案的上下文中,您是100%正确的。尽管有一些设置(例如java)中的i
不起作用,或者至少不像预期的那样,但添加大小写会起作用,并根据人们的看法增强可读性:-)这些是PCRE的。Java如何做到这一点与此无关。正则表达式并不总是可以跨引擎移植。我更喜欢在preg\u match
上使用它。它实际上也比正则表达式快。它也可以放在函数中(例如isHash(string$hash,int$length=32),以减少函数调用开销。即使这样,也可能比正则表达式快。值得注意的是:它匹配任何32个字符的十六进制字符串。无法显式验证md5。
<?php
$hash = '00236a2ae558018ed13b5222ef1bd987';
var_dump(strlen($hash) === 32 && ctype_xdigit($hash));