Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 要匹配md5哈希的正则表达式_Php_Regex_Match - Fatal编程技术网

Php 要匹配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 {

应该使用什么类型的正则表达式来匹配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 {
    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));