重复字符或增量字符的前缀匹配

2022-03-29 00:00:00 regex php preg-match

我正在使用preg Match验证密码为:

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

也接受特殊字符。

但由于某些原因,我需要修改它以接受

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


解决方案

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
    }

相关文章