在PHP中检查重复的字母

时间:2011-09-12 19:09:31

标签: php

我正在创建一个密码验证工具,我想要的一个要求是防止用户连续输入太多字母。任何字母,包括大写字母,都不能以3次或更多次的顺序重复。

我的方法是使用for循环移动密码字符串,并在其中使用正则表达式嵌入一些检查。我似乎无法使逻辑工作,它可能很简单。这是我(很多)尝试破解这个问题的尝试之一:

$seqLetterCounter = 0;
    for($i=0; $i < strlen($password); ++$i) {
            if($password{$i} == '/([a-zA-Z])/') {
                $seqLetterCounter++;
            }
            if($seqLetterCounter > $this->maxSeqLetters){
                $this->errors[6] = 'You have used too many sequential letters in your password.  The maximum allowed is ' . $this->maxSeqLetters . '.';
            }
            if($password{$i} == '/([^a-zA-Z])/') {
                $seqLetterCounter = 0;
            }
        }

$ password - 表单中的已发布值。

$ maxSeqLetters - 保存变量,保存由用户定义的整数值。

errors [] - 一个数组,用于确定密码是否在各种检查中失败。

任何人都有一些指示?

1 个答案:

答案 0 :(得分:11)

使用正则表达式相当简单:

if (preg_match('/(\w)\1{2,}/', $password)) {
   die("3+ repeated chars not allowed");
}

搜索字符(\w),存储它(()),然后查看相同的字符是否会在之后(\1)出现两次或更多次{2,}


ok ...所以如果连续的3个以上的字母或数字都没出来,那么试试

/([a-z]{3,}|[0-9]{3,})/i

代替正则表达式。搜索任何字母([a-z])或(|)个数字([0-9]),这些数字会出现3次或更多次({3,}),并在案例中进行匹配 - 不敏感的方式(i),所以你不必担心aAa打破了比赛。