За последние 24 часа нас посетили 18260 программистов и 1583 робота. Сейчас ищут 1184 программиста ...

Ограничить ввод латиницей и цифрами

Тема в разделе "PHP для новичков", создана пользователем PCSpeaker, 26 дек 2007.

  1. PCSpeaker

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

    С нами с:
    26 дек 2007
    Сообщения:
    84
    Симпатии:
    0
    Делаю на пхп форму регистрации. Так вот нужно сделать, чтобы можно было вводить только латиницу и цифры.

    если делать так
    if (preg_match("/[a-z0-9_]/i") {код}
    то он проверяет есть ли там латиница но при этом не запрещает кириллицу.

    А если так
    if (preg_match("/[а-яё]/i") {$error=1;}
    то не проверяются всякие другие символы, которых на клавиатуре тьма (!"№;%:?* и т.д.) и запариться можно перебирать их.

    посоветуйте как нормально это сделать, пожалуйста!
     
  2. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда

    тест в студию!
     
  3. PCSpeaker

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

    С нами с:
    26 дек 2007
    Сообщения:
    84
    Симпатии:
    0
    Код (Text):
    1. <?php
    2. $login= $_POST['login'];
    3. $id= $_GET['id'];
    4. echo "<form method=\"POST\" action=\"test.php?id=aa\">
    5. Логин*:<br><input type=\"text\" maxlength=\"20\" name=\"login\" size=\"20\"><br>
    6. <input type=\"submit\" value=\"Отправить\"></form>
    7. ";
    8. if ($id=="aa") {
    9. if (preg_match("/[a-z0-9_]/i",$login))
    10. {
    11. echo "все ок";
    12. }
    13. else {echo "все плохо";}
    14. }
    15. ?>
    вводим asdasd - все ок
    вводим ыфвыфвфы - все плохо
    вводим asdasdвыфвыфв - все ок, а должно быть все плохо
     
  4. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    не внимательно читали документаию

    http://php.ru/manual/reference.pcre.pattern.syntax.html

    ^ декларирует начало данных (или линии, в многострочном режиме)
    $ декларирует конец данных (или линии, в многострочном режиме)

    в данном случае она находит asdasd и говорит что все хорошо потому что НАШЛА.

    мысля понятна?
     
  5. PCSpeaker

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

    С нами с:
    26 дек 2007
    Сообщения:
    84
    Симпатии:
    0
    Ну так да, я в начале и написал, что данный способ ищет латиницу, но не запрещает при этом кириллицу, поэтому мне не подошел. А как сделать так чтобы нельзя было ввести ничего кроме a-z0-9_
    А это как-то поможет в решении моего вопроса?
     
  6. shreck

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

    С нами с:
    7 авг 2007
    Сообщения:
    479
    Симпатии:
    0
    Адрес:
    Россия, Саратов
    PHP:
    1. <?
    2. if (preg_match('[^a-z0-9_]',$login))
    3. {
    4.  print 'fail\n';
    5. }
    6. else
    7. {
    8.  print "ok\n";
    9. }
    10. ?>
    11.  
     
  7. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    if (preg_match("/^[a-z0-9_]+$/i") {код}

    т.е. анализируется вся строка а не подстроки. понятно?

    и смени аватарку. разрешены только личные фото.
     
  8. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    в этом случае ^ идет как отцинание подмножества. документацию читайте ВНИМАТЕЛЬНО прежде чем советовать.
     
  9. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Код (Text):
    1. /^[a-z0-9_]+$/i
     
  10. PCSpeaker

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

    С нами с:
    26 дек 2007
    Сообщения:
    84
    Симпатии:
    0
    440Hz, теперь он пишет, что всегда все плохо. может какие символы конца строки затесались?

    Sergey89, а вот это и вправда работает.

    Всем спасибо за помощь!
     
  11. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    PCSpeaker

    ("/^[a-z0-9_]+$/i")

    плюсик забыл... старею...
     
  12. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Sergey89

    ти знал... ти знал... противный...
    =)
     
  13. PCSpeaker

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

    С нами с:
    26 дек 2007
    Сообщения:
    84
    Симпатии:
    0
    а что дает плюсик? можно эту строчку перевести на словесный язык? просто хотелось бы понимать что у меня в коде
     
  14. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    блин... RTFM для начала...
    http://php.ru/manual/reference.pcre.pattern.syntax.html

    прочти один раз хотя бы до конца.

    ("/^[a-z0-9_]+$/i")

    проверить на целую строку содержащую символы a-z0-9_ в любом количестве больше 0 регистронезависимую

    p.s.
    + квантификатор, означающий одно или более вхождений
     
  15. PCSpeaker

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

    С нами с:
    26 дек 2007
    Сообщения:
    84
    Симпатии:
    0
    Прочитал, разобрался, огромное спасибо.
     
  16. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    добро пожаловать в наш клуб...
     
  17. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    эдакий здобный сержант из тренировочного лагеря %)
     
  18. shreck

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

    С нами с:
    7 авг 2007
    Сообщения:
    479
    Симпатии:
    0
    Адрес:
    Россия, Саратов
    440Hz
    ну а я что написал?
    Если $login не цифры или буквы или _ то fail иначе ok. Если что-то не так поправьте....
     
  19. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Твоя регулярка означает: начало строки, потом a, потом -, потом z, потом 0, потом -, потом 9, потом _.
    =)
     
  20. shreck

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

    С нами с:
    7 авг 2007
    Сообщения:
    479
    Симпатии:
    0
    Адрес:
    Россия, Саратов
    Sergey89
    Блин конечно же да.)
    440Hz
    Пошел перечитывать RTFM =)