Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проверка пароля при помощи регулярных выражений
 
 автор: Z3RO   (01.05.2011 в 15:54)   письмо автору
 
 

Вобщем у меня есть проверка пароля(допустимы только латинские буквы и цифры, длинна от 3 до 10 символов):
if((mb_strlen($_POST['pass']) < 3 || mb_strlen($_POST['pass']) > 10) && (preg_match("/[^\da-zA-Z_]+/", trim($_POST['pass']))))
echo 'ERROR';
else
echo 'OK';

Но через проверку свободно проходят пароли с любыми наборами символов, любой длинны. В чем может быть проблема?

  Ответить  
 
 автор: Slo_Nik   (01.05.2011 в 16:08)   письмо автору
 
   для: Z3RO   (01.05.2011 в 15:54)
 

в mb_strlen укажите кодировку символов , регулярное выражение "привяжите" к началу и концу строки и уберите "крышку"

  Ответить  
 
 автор: Z3RO   (01.05.2011 в 16:10)   письмо автору
 
   для: Slo_Nik   (01.05.2011 в 16:08)
 

Вообще не понял. Можете расписать подробней?

  Ответить  
 
 автор: Slo_Nik   (01.05.2011 в 16:30)   письмо автору
 
   для: Z3RO   (01.05.2011 в 16:10)
 

в функции mb_strlen укажите дополнительный параметр, который определяет кодировку символов в строке, если он не указан, то принимается внутренняя кодировка

  Ответить  
 
 автор: cheops   (01.05.2011 в 17:04)   письмо автору
 
   для: Z3RO   (01.05.2011 в 15:54)
 

Нужно поправить регулярное выражение (за одно и проверку длины строки в него упаковать)
<?php
if(preg_match("/^[\da-zA-Z_]{3,10}$/"trim($_POST['pass']) ) ) 
echo 
'ERROR'
else 
echo 
'OK';
?>

  Ответить  
 
 автор: Z3RO   (01.05.2011 в 19:04)   письмо автору
 
   для: cheops   (01.05.2011 в 17:04)
 

Всё равно можно зарегистрироватся с паролем из символов, которые не являются латинским буквами и/или цифрами.

  Ответить  
 
 автор: cheops   (01.05.2011 в 20:36)   письмо автору
 
   для: Z3RO   (01.05.2011 в 19:04)
 

Есть такое дело, нужно еще отрицание добавить
<?php 
  $test 
"Символы";
  if(!
preg_match("/^[\da-zA-Z_]{3,10}$/"trim($test)))  
    echo 
'ERROR';  
  else  
    echo 
'OK'
?>

  Ответить  
 
 автор: Z3RO   (01.05.2011 в 20:48)   письмо автору
 
   для: cheops   (01.05.2011 в 20:36)
 

Работает. Огромное спасибо.

  Ответить  
 
 автор: Deed   (02.05.2011 в 09:15)   письмо автору
 
   для: cheops   (01.05.2011 в 20:36)
 


<?php 
  $test 
"Символы";
  if(!
preg_match("/[\d\w]{3,10}/i"trim($test)))  
    echo 
'ERROR';  
  else  
    echo 
'OK'
?> 

А, вообще-то, не этично, по крайней мере, хранить пароли пользователей в первозданном виде. Да и украсть их могут...

  Ответить  
 
 автор: cheops   (02.05.2011 в 10:49)   письмо автору
 
   для: Deed   (02.05.2011 в 09:15)
 

>А, вообще-то, не этично, по крайней мере, хранить пароли пользователей в первозданном виде.
>Да и украсть их могут...
О хранении вроде речи еще не было, только о составе пароля...

  Ответить  
 
 автор: Deed   (02.05.2011 в 18:05)   письмо автору
 
   для: cheops   (02.05.2011 в 10:49)
 

Я понимаю... Но ограничивать пользователя паролем только на латиннице это даже не эстетично.

  Ответить  
 
 автор: cheops   (02.05.2011 в 18:10)   письмо автору
 
   для: Deed   (02.05.2011 в 18:05)
 

Есть такое дело. Однако, в каждой избушке свои погремушки, считает разработчик, что ему в силу причин так будет удобнее - его разработчика право, в случае чего ему потом переделывать :)

  Ответить  
 
 автор: Deed   (02.05.2011 в 18:50)   письмо автору
 
   для: cheops   (02.05.2011 в 18:10)
 


<?php
function pass_hash($pass){
        if(isset(
$_POST['password1'])&&isset($_POST['password2'])){
          
          if(
$_POST['password1']==$_POST['password2']){
              
$_SESSION['pass_mail']=$_POST['password1'];// Для отправки юзеру
              
$pass=$_POST['password1'];
              
$pass=substr($pass,0,20);
              
$pass=htmlspecialchars(stripslashes($pass));
              
$pass=md5($pass);
              
$pass=substr($pass,4,28);
              
$pass=strrev($pass);
              return 
$pass;
          }
           else{
$_SESSION['reg_errors']="Введенные Вами пароли не совпадают!";
                         
$_SESSION['go']=1// Для инклюда reg_forms.php
                         
header("Location:".$_SERVER['HTTP_REFERER']); /*Перекидываем назад*/
                           
exit();
           }
         }
        else {
$_SESSION['reg_errors']="Напишите 2 раза пароль!";
                         
$_SESSION['go']=1// Для инклюда reg_forms.php
                         
header("Location:".$_SERVER['HTTP_REFERER']); /*Перекидываем назад*/
                           
exit();
          }
}

?>


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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования