Надежная проверка пароля с помощью специальных символов с RegEx в переполнении стека

Специальные символы — разрешены

Пробелы — не разрешены

Числовой символ — разрешено

письмо — разрешено

Минимальная длина поля 8

if (!preg_match("/([A-Za-z\S]*$){8,}/",$pass  )) {
error}

Но есть ошибка!

0

Решение

Я думаю, этого будет достаточно,

if(!preg_match("/^[^\s]{8,}$/i", $pass)) {
// error
}
1

Другие решения

Я думаю, что вы ищете:

if(!preg_match("/^\S{8,}$/i", $pass)) {
// error
}

Ваше текущее выражение, ([A-Za-z\S]*$){8,}был немного сложным и упускал некоторые ключевые моменты.

Сначала класс вашего персонажа, [A-Za-z\S]не соответствует вашим требованиям. \S такой же как [^\s] или же [^ \t\r\n\f]другими словами, любые непробельные символы. Это все, что вам нужно, так как все остальное разрешено.

Затем вы повторяете этот класс символов 0+ раз, после чего следует конец строки. Это все прекрасно, но вы пытаетесь повторить всю эту группу 8+ раз. Все, что вам действительно нужно сделать, это повторить класс символов 8+ раз, за ​​которым следует конец строки (и вы также захотите поставить перед этим начало строки, ^).


Это получает вас:

^\S{8,}$

демонстрация

1

Ваше выражение будет соответствовать всему, что заканчивается ноль или больше экземпляры перечисленных вами символов; следовательно, это будет соответствовать всему. Вы также не закрепили его на передней панели, поэтому после установки нуля вы все равно сопоставите любой пароль, если он заканчивается допустимой подстрокой. А также \S будет соответствовать все это не пространство, которое, кажется, не то, что вы ищете.

Если вы хотите только буквы, цифры и подчеркивание, используйте /^\w{8,}$/, Если вы хотите, чтобы другие символы также, например, .,!+использовать /^[\w.,!+]{8,}$/, И т. Д. (Только обратная косая черта и - имеют особое значение в диапазоне символов).

0
По вопросам рекламы [email protected]