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

Php 如何区分SHA1字符串和日期时间字符串?,php,Php,基本上我有两个选择: $one = "fdfeb16f096983ada02db49d46a8154475d700ae"; $two = "2011-12-28 05:20:01"; 我需要某种正则表达式,以便检测字符串是遵循$one中的模式,还是遵循$two中的模式 检测字符串是sha1还是datetime 确定这一点的最佳方法是什么 谢谢尝试使用preg_match()函数 尝试使用preg_match()函数 如果你是绝对的确定这是唯一的两个选项,我会选择strlen,而不是某种奇妙的r

基本上我有两个选择:

$one = "fdfeb16f096983ada02db49d46a8154475d700ae";
$two = "2011-12-28 05:20:01";
我需要某种正则表达式,以便检测字符串是遵循
$one
中的模式,还是遵循
$two
中的模式

检测字符串是sha1还是datetime

确定这一点的最佳方法是什么

谢谢

尝试使用preg_match()函数

尝试使用preg_match()函数


如果你是绝对的确定这是唯一的两个选项,我会选择strlen,而不是某种奇妙的regexp。

即使这不是唯一的两个选项(用户搞糟了),我还是会选择strlen,然后特别检查每种格式,如果它是您所期望的格式。

如果您是绝对的确保这是唯一的两个选项,我会选择strlen,而不是某种奇妙的regexp。

即使这不是唯一的两个选项(用户搞糟了),我还是会选择strlen,然后特别检查每种格式,如果它是您期望的格式。

使用regex的条件匹配每个选项。对于第二种情况:

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

我看不出一个明确的模式,但是你可以做其他的事情来检测其他潜在的情况。

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

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

我没有看到一个明确的模式,但是你可以做其他的事情来检测其他潜在的情况。

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

/^[a-f0-9]{40}$/
匹配由a-f或0-9组成的40个字符。^和$匹配字符串的开头和结尾,因此其中不能有其他内容

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

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

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

/^[a-f0-9]{40}$/
匹配由a-f或0-9组成的40个字符。^和$匹配字符串的开头和结尾,因此其中不能有其他内容

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

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

“$one”只是一个固定长度的[n全小写]十六进制字符串。如果你尝试了一些东西,你已经有了答案。(比如
[a-fA-F0-9]{40}
)根据对“$two”的处理,我会尝试将它转换为一个日期/时间,并在失败时拒绝它,尽管这方面的正则表达式相对简单。同样,如果你尝试了一些东西,它已经被解决了。@pst-是的,我确实尝试了一些东西,我有一些类似于
/^[0-9a-f]{40}$/I
-我不知道你为什么要在正则表达式中包含A-f,而你可以简单地使用
I
来区分大小写。我只是想找一个更好的方法来做这件事。谢谢你的假设。@Latox,撇开假设不谈,把你尝试过的,做过的和没做过的都贴出来是个好主意。所以到处都是懒散的问题,人们往往做出最坏的假设。显示您的工作有助于我们更好地回答您的问题。“$one”只是一个固定长度的[n所有小写]十六进制字符串。如果你尝试了一些东西,你已经有了答案。(比如
[a-fA-F0-9]{40}
)根据对“$two”的处理,我会尝试将它转换为一个日期/时间,并在失败时拒绝它,尽管这方面的正则表达式相对简单。同样,如果你尝试了一些东西,它已经被解决了。@pst-是的,我确实尝试了一些东西,我有一些类似于
/^[0-9a-f]{40}$/I
-我不知道你为什么要在正则表达式中包含A-f,而你可以简单地使用
I
来区分大小写。我只是想找一个更好的方法来做这件事。谢谢你的假设。@Latox,撇开假设不谈,把你尝试过的,做过的和没做过的都贴出来是个好主意。所以到处都是懒散的问题,人们往往做出最坏的假设。展示你的作品有助于我们更好地回答你的问题。这不是一个复杂的问题。在本例中,我不认为“$1”的字符串长度比简单的detect-if-sha1有什么优势。@pst我的想法是,使用直接函数(strlen/isset/strpos/count等)可以解决的任何问题都是比reg exp更好的方法,reg exp更难维护,并且可能(尽管在大多数情况下无关紧要)更慢。例如,数组/字符串的长度和/或计数缓存在zval=>芯片中以获取这些值。我没有看到任何长度检查优于的维护场景,但有几种情况下长度检查较差(例如,格式更改或添加了另一种格式)。我要补充的是,在所有大写字母中加上“绝对”和“仅”,强烈表明这不是最好的解决方案。为什么要在不容易做出假设的情况下做出假设?使用正则表达式,如果输入是意外的,您至少可以记录一个错误。@Isaac Cambron分析问题,预测将来可能出现的输入范围,并据此设计解决方案。对每一个问题使用经典并不总是好的。我基本上同意这种观点,但我们似乎不同意正则表达式的复杂性和重要性。对我来说,它们是工具箱中一个基本但功能强大的部分,每个程序员都应该自信地使用它,而不是在特殊情况下使用一些神秘的设备。这不是大炮,只是更精确的手枪。非常适合这样的东西。这不是一个复杂的问题。在本例中,我不认为“$1”的字符串长度比简单的detect-if-sha1有什么优势。@pst我的想法是,使用直接函数(strlen/isset/strpos/count等)可以解决的任何问题都是比reg exp更好的方法,reg exp更难维护,并且可能(尽管在大多数情况下无关紧要)更慢。例如,数组/字符串的长度和/或计数缓存在zval=>芯片中以获取这些值。我没有看到任何长度检查优于的维护场景,但有几种情况下长度检查较差(例如,格式更改或添加了另一种格式)。我要加上“绝对的”