3

我正在使用 preg match 来验证密码:

(preg_match("/^.*(?=.{5,}).*$/", $password)

它也接受特殊字符。

但由于某种原因,我需要修改它应该接受

  • 只有字母数字
  • 最少 5 个字符长
  • 并且非常重要的是它不能有任何重复或增量字符,例如:aaaa 或 12345 或 abc123 等

.

4

2 回答 2

6
if (preg_match(
    '%^           # Start of string
    (?!.*(.)\1)   # Assert no repeated characters
                  # Assert no sequential digits/characters
    (?!.*(?:01|12|23|34|45|56|67|78|89|90|
            ab|bc|cd|de|ef|fg|gh|hi|ij|jk|
            kl|lm|mn|no|op|pq|qr|rs|st|tu|
            uv|vw|wx|xy|yz))
    [a-z0-9]{5,}  # Match at least five alnum characters
    $             # End of string%ix', 
    $password)) {
    # Successful match
    }
于 2013-04-27T12:27:09.797 回答
0

扩展@TimPietzcker,他应该把所有功劳都归于他。所以一定要支持他的回答。但我需要这个:

没有三重重复字符

没有三倍增量字符/数字

因为双增量字符很奇怪,你甚至不会注意到你这样做了。

例如 test4x3x6 应该可以正常工作吗?错了,st是增量字符。这只会让你的用户发疯。

所以我用了这个:

function is_password_strong($password){
  $preg_res = preg_match(
      '%^           # Start of string
    (?!.*(.)\1{2})   # Assert no triple repeated characters
                  # Assert no sequential digits/characters
    (?!.*(?:012|123|234|345|456|567|678|789|890|
            abc|bcd|cde|def|efg|fgh|ghi|hij|ijk|jkl|
            klm|lmn|mno|nop|opq|pqr|qrs|rst|stu|tuv|
            uvw|vwx|wxy|xyz))
    .{8,}  # Match at least 8 characters
    $             # End of string%ix',
      $password);

  if ($preg_res) {

    return true;
  }else{
    return false;
  }
}
于 2018-02-12T21:26:08.250 回答