Специальные символы — разрешены
Пробелы — не разрешены
Числовой символ — разрешено
письмо — разрешено
Минимальная длина поля 8
if (!preg_match("/([A-Za-z\S]*$){8,}/",$pass )) {
error}
Но есть ошибка!
Я думаю, этого будет достаточно,
if(!preg_match("/^[^\s]{8,}$/i", $pass)) {
// error
}
Я думаю, что вы ищете:
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,}$
Ваше выражение будет соответствовать всему, что заканчивается ноль или больше экземпляры перечисленных вами символов; следовательно, это будет соответствовать всему. Вы также не закрепили его на передней панели, поэтому после установки нуля вы все равно сопоставите любой пароль, если он заканчивается допустимой подстрокой. А также \S
будет соответствовать все это не пространство, которое, кажется, не то, что вы ищете.
Если вы хотите только буквы, цифры и подчеркивание, используйте /^\w{8,}$/
, Если вы хотите, чтобы другие символы также, например, .,!+
использовать /^[\w.,!+]{8,}$/
, И т. Д. (Только обратная косая черта и -
имеют особое значение в диапазоне символов).