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

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

  • AdmBuxonly

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

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

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


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

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

    ?>



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

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


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

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


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


    то все норм.

    Почему?

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

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


  • adw0rd

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

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

    Что такое &quot;е&quot; в &quot;[а-яеА-Я]&quot;? {+++78+++} Если от регистра не зависит, то зачем юзать &quot;а-яА-Я&quot;? Пиши просто а-я {+++24+++} Какая у тебя кодировка? Какая локаль установлена?
    adw/0
  • Lirck

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

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

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

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

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


    Что такое &quot;е&quot; в &quot;[а-яеА-Я]&quot;? {+++78+++} Если от регистра не зависит, то зачем юзать &quot;а-яА-Я&quot;? Пиши просто а-я


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

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

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

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


    у тебя просто &quot;i&quot; считается частью паттерна и игнорируется из-за &quot;$&quot;
    adw/0
  • AdmBuxonly

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

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


    |^[а-я]$|i


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

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

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

    AdmBuxonly, может только если &quot;ё&quot;? Хотя я не парился так никогда… {+++16+++}


    |^[а-я]$|i


    т.е. можно и без заглавных …А-Я]? Если введут имя так: Олег, то он пройдет проверку при |^[а-я]$|i?
    должен, пробуй {+++14+++}
    Какая у тебя кодировка? Какая локаль установлена?
    ответишь?
    adw/0
  • AdmBuxonly

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

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

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


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

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

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

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

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

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

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

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


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


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

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




  • adw0rd

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

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

  • rider-sx

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

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



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


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



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

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

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

    md5, это начало шаблона, а не отрицание
    adw/0
  • rider-sx

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

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


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

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

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




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


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



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


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

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