私は PHP でパスワード強度チェッカーを作成しており、正規表現を使用して強度計算用のさまざまなパラメーターを計算しています。文字列内の連続する文字の繰り返し数を確認できる必要があります。例えば:
baaabaaablacksheep
戻るだろう5
sillystring
戻るだろう1
and so on...
正規表現を使用し\1+
て繰り返し文字を見つけ、 を使用strlen()
してそれらを数えることができます。次のようなものを試してください:
$str = 'baaabaaablacksheep';
$repeating = array();
preg_match_all('/(\w)(\1+)/', $str, $repeating);
if (count($repeating[0]) > 0) {
// there are repeating characters
foreach ($repeating[0] as $repeat) {
echo $repeat . ' = ' . strlen($repeat) . "\n";
}
}
出力:
aaa = 3
aaa = 3
ee = 2
newfurnitureyによって投稿されたソリューションの別のバリアント:
$passarr = Array('baaabaaablacksheep', 'okstring', 'sillystring');
foreach($passarr as $p) {
$repeats = 0;
preg_match_all('/(.)(\1+)/', $p, $matches, PREG_SET_ORDER);
foreach($matches as $m) $repeats += strlen($m[2]);
printf("%s => %d repeats\n", $p, $repeats);
}
プリント:
baaabaaablacksheep => 5 repeats
okstring => 0 repeats
sillystring => 1 repeats