1

第一的,

sha1 哈希是否可能是所有数字或字母,

其次,在使用正则表达式检查 sha 1 哈希时是否需要开始和结束分隔符,即

/^[0-9a-f]{40}$/i

代替

/[0-9a-f]{40}/i

是否需要使用分隔符?

我问我是否应该检查模式是否至少有一个数字和至少一个字母,或者这无关紧要?

4

1 回答 1

4

sha1 哈希是一个 160 位的值,可以在全 0 和全 1 之间。这意味着是的,理论上它可以是所有数字或所有字母(更具体地说,它可以是十六进制表示)。

至于开始和结束标记,除非您以其他方式检查字符串,否则它们是必需的。您发布的两种模式不等效:

/^[0-9a-f]{40}$/i

由 0-9 或 af 中的 40 个字符组成且仅包含 40 个字符的字符串。

/[0-9a-f]{40}/i

连续包含 0-9 或 af 的 40 个字符的字符串。

换句话说,第一种模式会认为这是无效的,而第二种则不会:

|0000000000000000000000000000000000000000|

第二个模式将匹配中间的 40 个有效字符,而不关心其余部分。

如果您还用于strlen验证字符串是否正好是 40 个字符,则可以有效地将第二个模式转换为第一个模式。不过,这有点多余,因为您基本上会有以下模式:

一个字符串:(在 0-9 或一行中包含 40 个字符)和(正好是 40 个字符)。

第一个版本表达得更紧凑,尽管第二个版本更明显。

于 2012-05-26T05:01:41.837 回答