第一的,
sha1 哈希是否可能是所有数字或字母,
其次,在使用正则表达式检查 sha 1 哈希时是否需要开始和结束分隔符,即
/^[0-9a-f]{40}$/i
代替
/[0-9a-f]{40}/i
是否需要使用分隔符?
我问我是否应该检查模式是否至少有一个数字和至少一个字母,或者这无关紧要?
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 个字符)。
第一个版本表达得更紧凑,尽管第二个版本更明显。