首先,
sha1哈希是否可能是所有数字或字母,
第二,当使用正则表达式检查sha 1哈希时,是否需要开始和结束分隔符,即
/^[0-9a-f]{40}$/i
取代
/[0-9a-f]{40}/i
是否需要使用分界符?
我问我应该检查模式是否至少有一个数字和至少一个字母,或者这不重要吗?
答案 0 :(得分:4)
sha1哈希值是160位值,可以在所有0和全1之间。这意味着是的,理论上它可以是所有数字或所有字母(更具体地说,它的十六进制表示可以是)。
对于开始和结束标记,除非您以其他方式检查字符串,否则它们是必需的。您发布的两种模式不相同:
/^[0-9a-f]{40}$/i
由0-9或a-f组成且仅包含40个字符的字符串。
/[0-9a-f]{40}/i
一个字符串,包含0-9中的40个字符或一行中的a-f。
换句话说,第一种模式会认为这种无效,而第二种模式则不会:
|0000000000000000000000000000000000000000|
第二个模式将匹配中间的40个有效字符,而不关心其余部分。
如果您还使用strlen
来验证字符串是否正好为40个字符,则可以有效地将第二个模式转换为第一个模式。这有点多余,因为你基本上有一个模式:
一个字符串:(在0-9中包含40个字符或连续包含a-f)和(正好是40个字符)。
第一个版本更紧凑地表达了它,尽管第二个版本更为明显。