ФорумПрограммированиеPHP для идиотов → Опять регулярки...

Опять регулярки...

  • AdmBuxonly

    Сообщения: 370 Репутация: N Группа: Кто попало

    Spritz 6 августа 2009 г. 15:52

    Столкнулся с проблемой:


    <?php
    if(!empty($_POST))
    {
    if(isset($_POST['submit'])) // Если нажата кнопка, то…
    {
    $author = $_POST['author'];

    // Обрабатываем $author
    if(empty($author)) // если пустая
    {
    echo "<p style='color:red;'>Вы не ввели имя! Поле обязательно для заполнения!</p>";
    }
    if(!preg_match("|^[а-яеА-Я]$i|", $author))
    {
    echo "<p style='color:red;'>Имя должно содержать буквы русского алфавита</p>";
    }
    $author = htmlspecialchars($author);
    $author = trim($author);
    $author = stripslashes($author);
    }
    }

    ?>



    это код проверки.

    При проверке на правильность ввода имени таким способом
    if(!preg_match("|^[а-яеА-Я]$|i", $author))


    выводит всегда, чтобы не ввел:

    {
    echo "<p style='color:red;'>Имя должно содержать буквы русского алфавита</p>";
    }


    Когда таким способом:
    if(!preg_match("|^[а-яеА-Я]$i|", $author))


    то все норм.

    Почему?

    к примеру майл проверять, вот этот момент (
    $i|
    ) в конце строки выглядит так (
    $|i
    )

    а почему он при проверке русских букв не работает как надо. Ведь это говорит от том, что конец строки $ и не зависть от регистра i. не пойму… объяните?!


  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 6 августа 2009 г. 16:06, спустя 14 минут 13 секунд

    Что такое "е" в "[а-яеА-Я]"?
    Спустя 78 сек.
    Если от регистра не зависит, то зачем юзать "а-яА-Я"? Пиши просто а-я
    Спустя 24 сек.
    Какая у тебя кодировка? Какая локаль установлена?
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 6 августа 2009 г. 16:06, спустя 26 секунд

    |^[а-я]$|i
  • AdmBuxonly

    Сообщения: 370 Репутация: N Группа: Кто попало

    Spritz 6 августа 2009 г. 16:07, спустя 26 секунд


    Что такое "е" в "[а-яеА-Я]"?
    Спустя 78 сек.
    Если от регистра не зависит, то зачем юзать "а-яА-Я"? Пиши просто а-я


    По правилам букву 'е' следует задавать отдельно т.к. она не входит в интервал а-я, или я не прав?
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 6 августа 2009 г. 16:08, спустя 57 секунд

    При таком использовании:
    $i|


    у тебя просто "i" считается частью паттерна и игнорируется из-за "$"
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • AdmBuxonly

    Сообщения: 370 Репутация: N Группа: Кто попало

    Spritz 6 августа 2009 г. 16:08, спустя 35 секунд


    |^[а-я]$|i


    т.е. можно и без заглавных …А-Я]? Если введут имя так: Олег, то он пройдет проверку при |^[а-я]$|i?
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 6 августа 2009 г. 16:09, спустя 41 секунду

    AdmBuxonly, может только если "ё"? Хотя я не парился так никогда…
    Спустя 16 сек.


    |^[а-я]$|i


    т.е. можно и без заглавных …А-Я]? Если введут имя так: Олег, то он пройдет проверку при |^[а-я]$|i?
    должен, пробуй
    Спустя 14 сек.
    Какая у тебя кодировка? Какая локаль установлена?
    ответишь?
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • AdmBuxonly

    Сообщения: 370 Репутация: N Группа: Кто попало

    Spritz 6 августа 2009 г. 16:13, спустя 4 минуты 20 секунд

    // Обрабатываем $author
    if(empty($author)) // если пустая
    {
    echo "<p style='color:red;'>Вы не ввели имя! Поле обязательно для заполнения!</p>";
    }
    if(!preg_match("|^[а-я]$|i", $author))
    {
    echo "<p style='color:red;'>Имя должно содержать буквы русского алфавита</p>";
    }


    не пашет, при вводе имя олег

    кодировка windows-1251
    локаль? Это что?
    Я на денвере работаю..

    вот попробуй: http://myliberty-designs.msk.ru/add_artless.php первое поле.
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 6 августа 2009 г. 16:15, спустя 1 минуту 29 секунд

    а зачем там вобще доллар в регулярке?
    Спустя 74 сек.
    стоп
    у тебя условие не правильно
    двойное отрицание !preg_.. и ^[…
    все умрут, а я изумруд
  • AdmBuxonly

    Сообщения: 370 Репутация: N Группа: Кто попало

    Spritz 6 августа 2009 г. 16:18, спустя 3 минуты 2 секунды


    а зачем там вобще доллар в регулярке?
    Спустя 74 сек.
    стоп
    у тебя условие не правильно
    двойное отрицание !preg_.. и ^[…


    он определяет конец строки

     if(!preg_match("|^[а-я]$|i", $author))
    если не прошел проверку то…
    {
    echo "<p style='color:red;'>Имя должно содержать буквы русского алфавита</p>";
    }




  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 6 августа 2009 г. 16:17, спустя 23 часа 59 минут 16 секунд

    http://ru.php.net/manual/kr/function.setlocale.php
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • rider-sx

    Сообщения: 2706 Репутация: N Группа: Адекваты

    Spritz 6 августа 2009 г. 16:18, спустя 32 секунды



    а зачем там вобще доллар в регулярке?
    Спустя 74 сек.
    стоп
    у тебя условие не правильно
    двойное отрицание !preg_.. и ^[…


    он определяет конец строки



    вообщето начало.
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 6 августа 2009 г. 16:19, спустя 51 секунду

    md5, это начало шаблона, а не отрицание
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • rider-sx

    Сообщения: 2706 Репутация: N Группа: Адекваты

    Spritz 6 августа 2009 г. 16:19, спустя 26 секунд


    а зачем там вобще доллар в регулярке?
    Спустя 74 сек.
    стоп
    у тебя условие не правильно
    двойное отрицание !preg_.. и ^[…
    С чего ты взял что двойное отрицание? символ ^ означает что паттерн применяется к началу строки
    Спустя 14 сек.
    adw0rd, опередил )
  • AdmBuxonly

    Сообщения: 370 Репутация: N Группа: Кто попало

    Spritz 6 августа 2009 г. 16:20, спустя 57 секунд




    а зачем там вобще доллар в регулярке?
    Спустя 74 сек.
    стоп
    у тебя условие не правильно
    двойное отрицание !preg_.. и ^[…


    он определяет конец строки



    вообщето начало.


    ^ начало $ конец

Пожалуйста, авторизуйтесь, чтобы написать комментарий!