#php #regex #function #passwords #preg-match
#php #регулярное выражение #функция #пароли #preg-match
Вопрос:
Итак, у меня есть код регулярного выражения, чтобы убедиться, что пароль состоит из 4-13 символов, он продолжает сбоить
public function valid_password($password){
if(preg_match('^.{3,14}^', $password)){
return true;
}//end if
else{
return false;
}//end else
}
Я использую regex, а не атрибут php length, потому что позже я добавлю больше кода regex. Однако теперь я застрял с этой неисправной программой.
Проблема в том, что он гарантирует, что пароль состоит из более чем 3 символов, однако его не волнует, какой он длины, как будто я не установил никаких ограничений.
Заранее спасибо
Ответ №1:
Вы использовали ^
в качестве разделителей php.net/mregexp.reference.delimiters.php здесь:
^.{3,14}^
Это возможно, но в вашем случае не очень хорошая идея, потому что вам нужно ^
для его реальной цели. Обычно это соответствует началу темы. И чтобы правильно посчитать длину, вам нужно это сделать. Вам также нужен мета-символ $
конца темы.
Итак, в основном:
preg_match('/^.{3,14}$/'
Теперь, если вы хотите объединить это регулярное выражение с другими критериями соответствия, я бы рекомендовал этот необычный синтаксис утверждения:
preg_match('/(?=^.{3,14}$) (...)/x', $password)
Это позволит вам указать что-то другое вместо ...
— и сохранить проверку длины неявной.
Ответ №2:
^
является привязкой к началу строки. Конец строки разделяется с помощью $
:
public function valid_password($password) {
return preg_match('~^.{3,14}$~', $password);
}
Но в этом случае я бы использовал не регулярное выражение, а strlen
функцию вместо этого:
public function valid_password($password) {
$length = strlen($password);
return $length >= 3 amp;amp; $length <= 14;
}
Если вам нравится взламывать, чтобы сохранить вам эту строку:
public function valid_password($password) {
return isset($password[2]) amp;amp; !isset($password[14]);
}
Но на самом деле, почему вы хотите ограничить длину пароля 14 символами? Таким образом, вы мешаете людям выбирать действительно безопасные пароли. Вероятно, вам следует увеличить этот лимит.
Комментарии:
1. «Извините, но длина функции отсутствует в онлайн-руководстве». Возможно, вы имели в виду
strlen
?2. @Tomalak: Ты прав! Извините за это.
3. Для PHP используйте
strlen
: php.net/manual/en/function.strlen.php . Кроме того, убедитесь, чтоtrim
ввод. Теперь оно также вернет true только для пробелов.4. @nikic вы говорите, что 14 небезопасен, сколько бы вы порекомендовали
5. @Tom: Хм, трудно сказать. Я лично вообще не ограничиваю максимальный размер. Пароли обычно сохраняются с использованием хэша фиксированного размера, поэтому хранение не является проблемой. Но максимум 100 символов должно быть в порядке. Это должно удовлетворить даже самых параноидальных людей.
Ответ №3:
Попробуйте это:
preg_match('/^.{3,14}$/', $password)
Ответ №4:
попробуйте
preg_match('/^.{3,14}$/', $password)
но регулярное выражение для подсчета длины строки?? = Перебор
Ответ №5:
^
соответствует началу строки, а не концу. $
соответствует концу.
И вы забыли свои разделители.
Полная фиксированная строка:
if (preg_match('/^.{3,14}$/', $password)) {
Тем не менее, я настоятельно рекомендую вам вместо этого использовать:
$len = strlen($password);
if ($len >= 3 amp;amp; $len <= 14) {
вместо этого, поскольку регулярные выражения полностью излишни для этого.