Регулярное выражение для пароля, содержащего не менее 8 символов и не менее 1 не алфавитно-цифровых символов
Я пытаюсь сделать проверку в PHP, если пользователь меняет свой пароль, его новый пароль должен быть 8 или более символов и по крайней мере с 1 не алфавитно-цифровым паролем. Как я должен проверить это и каким будет регулярное выражение?
Проверка длины - это простая часть strlen >= 8
, Моя проблема - регулярные выражения. Я действительно понятия не имею о регулярных выражениях, даже после нескольких лет изучения информатики.
Спасибо
6 ответов
Попробуйте что-то вроде этого, чтобы проверить, использовали ли они не алфавитно-цифровые символы:
if( !preg_match( '/[^A-Za-z0-9]+/', $password) || strlen( $password) < 8)
{
echo "Invalid password!";
}
if
заявление оценит true
если $password
не содержит хотя бы одного из символов, отсутствующих в списке (буквенно-цифровые символы).
Попробуй это.
~^(.*[\W]+.*){8,}$~
- . * ищет любой символ 0 или более раз
- [\W]+ соответствует хотя бы одному несловесному символу
- {8,} соответствует значению в скобках, только если длина составляет 8 или более символов
- ^ $ соответствует началу и концу строки
Насколько мне известно, вы не можете достичь этого, потому что это сложный сценарий состояния.
Что вам нужно сделать, это сделать в три этапа:
$has8characters = (mb_strlen($_REQUEST['password']) >= 8);
$hasAlphaNum = preg_match('b[a-z0-9]+bi', $_REQUEST['password']);
$hasNonAlphaNum = preg_match('b[\!\@#$%\?&\*\(\)_\-\+=]+bi', $_REQUEST['password']);
Это не было проверено, но вы достаточно близки к тому, что вы хотите достичь с этим...
Удачи
Если вы проверяете длину строки с помощью strlen/mb_strlen, вы можете просто написать регулярное выражение, соответствующее любому не алфавитно-цифровому символу. Если это соответствует одному (или более), вы хорошо. Например:
$password = 'asdf123!';
if(mb_strlen($password) >= 8 and preg_match('/[^0-9A-Za-z]/', $password))
{
// password is valid
}
Это должно работать (не проверено)
if (preg_match('/^(?=.*[\W])(?=[a-z0-9])[\w\W]{8,}$/i', '123abc!$'))
{
//error
}
Убедитесь, что пароль имеет длину 8 символов и имеет хотя бы один специальный символ
Это решает это. Попробуй!
if(!preg_match('/^(?=.*\d)(?=.*[A-Za-z])[0-9A-Za-z!@#$%]{8,}$/', $pass)) {
echo "Password does not meet the requirements! It must be alphanumeric and atleast 8 characters long";
}