portal.mkgtu.ru/common/components/RegularExpressionPasswordMa.../RegularExpressionPasswordMa...

126 lines
2.7 KiB
PHP
Raw Permalink Normal View History

2024-03-28 09:51:45 +03:00
<?php
namespace common\components\RegularExpressionPasswordManager;
class RegularExpressionPasswordManager
{
private static function mustContainLowercaseLetters(): array
{
return [
'charList' => ['а-я', 'a-z'],
'matchPattern' => '(?=.*[a-zа-я])'
];
}
private static function mustContainNumbers(): array
{
return [
'charList' => ['0-9'],
'matchPattern' => '(?=.*\d)'
];
}
private static function mustContainCapitalLetters(): array
{
return [
'charList' => ['A-Z', 'А-Я'],
'matchPattern' => '(?=.*[A-ZА-Я])'
];
}
private static function mustContainSpecialCharacters(): array
{
$specialChars = '_\-+=№#@$!%*?&\(\)\[\]\{\}';
return [
'charList' => [str_replace('\\', '', $specialChars)],
'matchPattern' => "(?=.*[{$specialChars}])"
];
}
public static function buildRegex(
bool $passwordMustContainNumbers = true,
bool $passwordMustContainCapitalLetters = true,
bool $passwordMustContainSpecialCharacters = true
): array {
$matchPattern = '/^';
[
'charList' => $charList,
'matchPattern' => $bufferMatchPattern,
] = RegularExpressionPasswordManager::mustContainLowercaseLetters();
$matchPattern .= $bufferMatchPattern;
if ($passwordMustContainNumbers) {
[
'charList' => $bufferCharList,
'matchPattern' => $bufferMatchPattern,
] = RegularExpressionPasswordManager::mustContainNumbers();
$matchPattern .= $bufferMatchPattern;
$charList = array_merge($charList, $bufferCharList);
}
if ($passwordMustContainCapitalLetters) {
[
'charList' => $bufferCharList,
'matchPattern' => $bufferMatchPattern,
] = RegularExpressionPasswordManager::mustContainCapitalLetters();
$matchPattern .= $bufferMatchPattern;
$charList = array_merge($charList, $bufferCharList);
}
if ($passwordMustContainSpecialCharacters) {
[
'charList' => $bufferCharList,
'matchPattern' => $bufferMatchPattern,
] = RegularExpressionPasswordManager::mustContainSpecialCharacters();
$matchPattern .= $bufferMatchPattern;
$charList = array_merge($charList, $bufferCharList);
}
$matchPattern .= '.*$/';
return [
'charList' => $charList,
'matchPattern' => $matchPattern,
];
}
}