2014-10-14 4 views
0

Я пытаюсь сделать валидатор паролей и столкнулся с проблемой. Кажется, мой код не будет читать специальный символ. ниже мой код:Использование специальных символов в валидаторе паролей

<?php 
     $Passwords = array(
     'Pas$word1', 
     'Pas$word2', 
     'Pas$word3', 
     'Pas$word4', 
     'pas$word1', 
     'PAS$WORD1', 
     'Password1', 
     'Pas$word', 
     'Pas$word 1', 
     'Pas$word1234567890', 
     'P$wd1'); 

     function validatePassword($Password) 
     { 
      if (preg_match("[^!-/0-9A-Za-z]", $Password)==1) 
      { 
       return TRUE; 
      } 
      else 
      { 
       return FALSE; 
      } 
     } 

     foreach ($Passwords as $Password) 
     { 
      if (validatePassword($Password) == false) 
      { 
       echo "<p>The password <em>$Password</em> does not appear to be valid.</p>"; 
      } 
     } 
     echo "<p>Processing has completed.</p>"; 
    ?> 

фиксированный мой массив, чтобы он имел одинарные кавычки, теперь все отображается. Текущая проблема заключается в том, что все отображается. Что не так в моей функции validatePassword?

Любая помощь будет оценена по достоинству.

+5

Используйте одинарные кавычки или избежать ваши буквенные знаки доллара с обратной косой черты. В противном случае '$ word1' будет интерпретироваться как переменная с именем' word1'. –

+3

Зачем проверять пароли? Почему бы не позволить пользователям выбирать то, что они хотят для пароля? Я думаю, что наиболее валидацией, которую вы должны рассмотреть, является минимальная длина. – Brad

+2

FYI: Повторение пароля обратно пользователю - это действительно очень плохо. В идеале эта логика проверки должна быть предварительно сформирована на стороне клиента, и фактический действительный пароль, который отправляется на сервер, должен быть * немедленно * хэширован, когда он туда доберется. Валидация все еще может быть выполнена на стороне сервера для хорошей оценки, но не повторять ее. Просто выделите поле ввода как содержащее недопустимое значение (и укажите некоторые сведения о том, почему это недопустимо, возможно). Затем, конечно, сразу же хеш принимается на стороне сервера. – David

ответ

1

Используйте одинарные кавычки или избегайте буквальных знаков доллара с помощью обратных косых черт. В противном случае $word1 будет интерпретироваться как переменная с именем word1.

См. http://php.net/manual/en/language.types.string.php.

+1

Я действительно не понимаю, почему люди используют '' 'в php или Javascript вместо' ''. Так много проблем было бы решено таким образом, но вы правы, , который разрешит проблему. Это или ускользает от '$' (например: '' Pas \ $ word1 "'). –

+0

Теперь он отображается правильно, но как насчет того, чтобы использовать специальные символы, сейчас каждый элемент в моем массиве что я сделал неправильно в моей функции validatePassword? – KingDave212

+0

См. ответ Сэммича ниже. –

1

Ваша вторая проблема заключается в том, что у вас нет разделителей на вашем регулярном выражении. Изменение:

if (preg_match("[^!-/0-9A-Za-z]", $Password)==1) 

To:

if (preg_match("/[^!-/0-9A-Za-z]/", $Password)==1) 

Ваш третьей проблемой является то, что у вас есть сообщения об ошибках отклонили/выкл. Если бы вы были на вас, вы получили бы многочисленные предупреждения при запуске вашего кода, который указал бы на источник ваших проблем.

При разработке нового кода поставить это в верхней части файла:

error_reporting(E_ALL); 
ini_set('display_errors', 'On'); 
Смежные вопросы