如何区分SHA1字符串和日期时间字符串?

时间:2012-01-02 05:00:17

标签: php

基本上我有两个选择:

$one = "fdfeb16f096983ada02db49d46a8154475d700ae";
$two = "2011-12-28 05:20:01";

我需要某种正则表达式,以便我可以检测到字符串遵循$one中的模式或$two中的模式

检测字符串是sha1还是日期时间。

确定这个的最佳方法是什么?

由于

5 个答案:

答案 0 :(得分:5)

如果您 ABSOLUTE 确定这些是 ONLY 两个选项,我会选择strlen,而不是某种奇妙的正则表达式。
即使那些不是唯一的两个选项(用户搞砸了),我仍然会使用strlen,然后专门检查每种格式,如果它是你期望的那样。

答案 1 :(得分:2)

我不知道如何在PHP中应用正则表达式,但假设实际的正则表达式足够......

/^[a-f0-9]{40}$/

匹配由a-f或0-9组成的40个字符。 ^和$匹配字符串的开头和结尾,因此其中没有其他内容。

/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/

将字符串与您拥有的日期模式匹配。

答案 2 :(得分:0)

if (preg_match($one, $string) {
    echo "$string matches $one";
} else if (preg_match($two, $string) {
    echo "$string matches $two";
}

答案 3 :(得分:0)

尝试使用preg_match()函数。

http://php.net/manual/en/function.preg-match.php

答案 4 :(得分:0)

使用正则表达式匹配每个选项的条件。对于第二种情况:

if(preg_match('|(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}|',$two)
{
   echo "Matching two";
}

我没有看到第一个明确的模式,但你可以使用elseif(s)来检测其他潜在的案例。