За последние 24 часа нас посетили 60383 программиста и 1771 робот. Сейчас ищет 2231 программист ...

Не работает регулярное выражение

Тема в разделе "PHP для новичков", создана пользователем Mr.ILLUMINOR, 6 фев 2012.

  1. Mr.ILLUMINOR

    Mr.ILLUMINOR Активный пользователь

    С нами с:
    6 фев 2012
    Сообщения:
    27
    Симпатии:
    0
    Прошу прощения, если создаю тему в неподобающем разделе и прошу модераторов не наказывать, а перенести по возможности тему в необходимый раздел или дать ссылку на тему для подобных вопросов.

    Итак, у меня есть следующий кусок кода:

    Код (Text):
    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    2. <html>
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    5. <title>Регистрация</title>
    6. </head>
    7. <form action="index.php" method="post">Логин:<br><input name="login" type="text" maxlength="15"><br>Пароль:<br><input name="password" type="password"><br>Повторите пароль:<br><input name="re_password" type="password"><br><input name="registration" type="submit" value="Зарегистрироваться"></form>
    8.  
    9. <?
    10. if (isset($_POST['registration']))
    11. {
    12.     $login = $_POST['login'];
    13.     $password = $_POST['password'];
    14.     $re_password = $_POST['re_password'];
    15.    
    16.     if (trim($login) == "" or trim($password) == "" or trim($re_password) == "")
    17.     {
    18.         echo "Пожалуйста, заполните все поля!";
    19.     }
    20.     else
    21.     {
    22.         if ($password !== $re_password)
    23.         {
    24.             echo "Пароли не совпадают!";
    25.         }
    26.         else
    27.         {
    28.             if (strlen($login) < 3 or strlen($password) < 3)
    29.             {
    30.                 echo "Логини пароль должны содержать более 3-х символов!";
    31.             }
    32.             else
    33.             {
    34.                 if (strlen($login)>15)
    35.                 {
    36.                     echo "Логин должен содеражть не более 15-и символов!";
    37.                 }
    38.                 else
    39.                 {
    40.                     if (!preg_match("[a-zA-Z0-9]", $login) or !preg_match("[a-zA-Z0-9]", $password))
    41.                     {
    42.                         echo "Логин и пароль могут содержать только буквы латинского алфавита и цифры!";
    43.                     }
    44.                     else
    45.                     {
    46.                        
    47.                     }
    48.                 }
    49.             }
    50.            
    51.         }
    52.        
    53.     }
    54.        
    55.    
    56.    
    57. }
    58. ?>
    59. <body>
    60. </body>
    61. </html>
    В 40-й строчке идёт проверка на то, чтобы значение переменных $login и $password должны состоять только из латинских букв и цифр. Но, чтобы я не вводил скрипт всегда мне выводит Логин и пароль могут содержать только буквы латинского алфавита и цифры! Где я допустил ошибку?
     
  2. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Код (Text):
    1.  
    2. /[a-zA-Z0-9]/
    И кстати, preg_match останавливается на первом совпадении
     
  3. Mr.ILLUMINOR

    Mr.ILLUMINOR Активный пользователь

    С нами с:
    6 фев 2012
    Сообщения:
    27
    Симпатии:
    0
    А как это может повредить моему скрипту?
     
  4. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Код (Text):
    1.  
    2. $login = "A_куй";
    3. $password = "A_даблкуй";
    4. if (!preg_match("/[a-zA-Z0-9]/", $login) or !preg_match("[a-zA-Z0-9]", $password))
    5. {
    6.                   echo "Логин и пароль могут содержать только буквы латинского алфавита и цифры!";
    7. }
    Добавлено спустя 2 минуты 15 секунд:
    Код (PHP):
    1. if (preg_match("/[^a-zA-Z0-9]/", $login) or preg_match("/[^a-zA-Z0-9]/", $password))
    2. {
    3.                   echo "Логин и пароль могут содержать только буквы латинского алфавита и цифры!";
    4. }
    5.  
     
  5. Mr.ILLUMINOR

    Mr.ILLUMINOR Активный пользователь

    С нами с:
    6 фев 2012
    Сообщения:
    27
    Симпатии:
    0
    Теперь понял. То есть, если я введу 00000ляляля скрипт ничего не заподозрит, так как остановиться на первом же нуле. Тогда как этого избежать?
     
  6. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Смотри внимательнее, верный код написан мною..
    Код (Text):
    1.  
    2. preg_match("/[^a-zA-Z0-9]/", $login)
     
  7. Mr.ILLUMINOR

    Mr.ILLUMINOR Активный пользователь

    С нами с:
    6 фев 2012
    Сообщения:
    27
    Симпатии:
    0
    А что даёт ^? Я понял, что благодаря этому символу мой скрипт адекватно заработал, но что конкретно я изменил добавив этот символ я не понял.
     
  8. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Найти всё [кроме a-zA-Z0-9]
     
  9. Mr.ILLUMINOR

    Mr.ILLUMINOR Активный пользователь

    С нами с:
    6 фев 2012
    Сообщения:
    27
    Симпатии:
    0
    Большое спасибо, AndreJM.