За последние 24 часа нас посетили 17565 программистов и 1314 роботов. Сейчас ищут 1449 программистов ...

простое регулярное выражение..помогите,пожалуйста((

Тема в разделе "Регулярные выражения", создана пользователем varvara, 20 апр 2015.

  1. varvara

    varvara Новичок

    С нами с:
    20 апр 2015
    Сообщения:
    7
    Симпатии:
    0
    пожалуйста, помогите, я только учусь... у меня есть выражение

    if (!preg_match('/^([1|2|3|4|5]{1})$/', $kipu)) {
    $ kipuError = "число должно быть от 1 до 5"}
    которое должно вывести значение одного числа от 1 до 5. Почему то 0 проходит тоже. Бьюсь два дня уже, пожалуйста, помогите((( только не обзывайтесь на слабый пол))
     
  2. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Попытайте так:
    Код (Text):
    1. '/^[1-5]$/'
    и почитайте про правила конструкции "[]"
     
  3. varvara

    varvara Новичок

    С нами с:
    20 апр 2015
    Сообщения:
    7
    Симпатии:
    0
    if (empty($_POST["kipu"])) {
    $kipu = "";
    } else {
    $kipu = test_input($_POST["kipu"]);
    if (!preg_match('/^[1-5]$/', $kipu)) {
    //if (!preg_match('/^([1|2|3|4|5]{1})$/', $kipu)) {
    $kipuErr = "on oltava ainoa luku astekkolla 1-5";
    }


    }

    Добавлено спустя 3 минуты 56 секунд:
    ой,часть текста выпала.....спасибо за ответ, но 0 все равно проходит(( вот все часть кода... с Вашим исправлением... может там что то не так? помогите, плиззз делитанту(((

    if (empty($_POST["kipu"])) {
    $kipu = "";
    } else {
    $kipu = test_input($_POST["kipu"]);
    if (!preg_match('/^[1-5]$/', $kipu)) {
    $kipuErr = "on oltava ainoa luku astekkolla 1-5";
    }


    }
     
  4. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Регулярка должна работать правильно.
    Тест:
    Код (Text):
    1. $s = '0';
    2. $ok = preg_match('/^[1-5]$/', $s, $out);
    3. var_dump($ok, $out);
    Добавлено спустя 2 минуты 43 секунды:
    Вероятно у Вас ошибка в условии
    Код (Text):
    1. if (empty($_POST["kipu"]))
    Если $_POST["kipu"] == '0' это тоже пустое значение.
    Должно быть так, скорее всего:
    Код (Text):
    1. if (!isset($_POST["kipu"]))
     
  5. varvara

    varvara Новичок

    С нами с:
    20 апр 2015
    Сообщения:
    7
    Симпатии:
    0
    спасиибо!!! вы супер-чудо-гений!!!!
     
  6. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Ошибаешься. Пустота это '' попробуй сравнить с ''=='0' они не будут равны.
    Код (PHP):
    1. if(''=='0') {
    2.     echo'равно';
    3. } else {
    4.     echo'не равно';
    5. } 
    Выводит не равно.
    А вот:
    Код (PHP):
    1. if(''==0) {
    2.     echo'равно';
    3. } else {
    4.     echo'не равно';
    5. } 
    Выводит равно.
    Но это катастрофа так делать.
    Код (PHP):
    1. if('равно'==0) {
    2.     echo'равно';
    3. } else {
    4.     echo'не равно';
    5. }
    Выводит равно.
    Осторожнее с этим...
    Во избежании нужно использовать === жестокое равенство или еще строгое сравнение типов, в случае разных типов возвращается лож.
     
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    всё логично: к строки применяются правила каста в число поэтому "равно" равно нулю.
     
  8. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Верю, что Вы крутой спец и Вам не нужно читать документацию. И всё же почитайте, это ещё более повысит Вашу самооценку. ;)
     
  9. varvara

    varvara Новичок

    С нами с:
    20 апр 2015
    Сообщения:
    7
    Симпатии:
    0
    Спасибо, огромное )))) вы все большие специалисты.))) пожалуйста, помогите еще..вам может быть с одного взгляда будет понятна в чем проблема...а я вторые сутки не могу сделать. Это страница, на которую были отправлены данные из анкеты. Все работает, кроме кнопок внизу... они должны перенаправлять пользователя на другую страницу и удалять сессию. Может быть кто то поможет? я учусь, и у нас это обязательный курс..... в котором я ничего не понимаю


    Код (PHP):
    1. <?php
    2. require_once "virheilmoitus.php";
    3.  
    4. if (! isset($_GET["varvara"])) {
    5.     header ( "location: index.php" );
    6.     exit ();    
    7.     }
    8.  
    9. else if (isset ( $_SESSION ["virheilmoitus"] )) {
    10.     $virheilmoitus = $_SESSION ["virheilmoitus"];
    11.     
    12. } else {
    13.     header ( "location: index.php" );
    14.     exit ();
    15. } 
    16. if (isset ( $_POST ["korjaa"] )) {
    17.     header ( "location: lomake.php" );
    18.     exit ();
    19. }
    20. if (isset ( $_POST ["talleta"] )) {
    21.     unset($_SESSION["virheilmoitus"]);
    22.     header ( "location: asetukset.php" );
    23.     exit ();
    24.  
    25. }
    26.  elseif (isset ( $_POST ["peruuta"] )) {
    27.      unset($_SESSION["virheilmoitus"]);
    28.     header ( "location: asetukset.php" );
    29.     exit ();
    30. } else {
    31. }
    32.  
    33.  
    34. ?>
    35.  
    36. <!DOCTYPE HTML>
    37. <html>
    38. <head>
    39. <style type="text/css">
    40. @import url("tyylit2.css");
    41. </style>
    42.  
    43.  
    44. </head>
    45.  
    46. <div id="links">[url="#"]Asetukset[/url]</div>
    47. <div id ="header"> </div>
    48. <div id="laatikko">
    49. <div id ="header"> </div>
    50. <p>
    51. <h2>Annoit  tiedot</h2></p>
    52. <?php
    53. print ("<p>Etu -ja sukunimi: " . $virheilmoitus->getName ()) ;
    54. print ("<br>Henkilötunnuksen loppuosa: " . $virheilmoitus->getHlo()) ;
    55. print ("<br>Puhelinnumero: " .  $virheilmoitus->getPnro());
    56. print ("<br>Sähköposti: " . $virheilmoitus->getEmail());
    57. print ("<br>Sähköposti: " . $virheilmoitus->getEmail());
    58. print ("<br>Kipu: " . $virheilmoitus->getKipu());
    59. print ("<br>Komentti: " . $virheilmoitus->getComment() . "</p>\n") 
    60. ?>
    61. <p><input class="blue" type="submit" name="korjaa" value="Korjaa">
    62. <input class="blue" type="submit" name="talleta" value="Talleta">
    63.  <input class="red" type="submit" name="peruuta" value="Peruuta"></p>
    64. </div>
    65.  
    66. </html>
     
  10. mr.akv

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

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    По кнопкам должно что-то отправляться или просто переадрессация?
    Если отправляться, то данные должны быть в форме.
    Если просто переадрессация, то для этого есть ссылки. Ну если уж очень хочется использовать вместо ссылки кнопки, то
    Код (Text):
    1. <input onclick="location.href='мегассылко'" class="blue" name="korjaa" value="Korjaa">
     
  11. varvara

    varvara Новичок

    С нами с:
    20 апр 2015
    Сообщения:
    7
    Симпатии:
    0
    Cпасибо большое за ответ. Нет, просто такое задание.....надо чтобы перенаправлялось например, когда нажимаешь кнопку

    <input class="blue" type="submit" name="исправить_информацию_o_себе" value="Исправить">
    переправляла на начальную страницу, где пользователь заполнял анкету.

    if (isset ( $_POST ["исправить_информацию_o_себе"] )) { // вот здесь я написала по русски, может так понятнее...
    header ( "location: анкета.php" );
    exit ();

    }
    if (isset ( $_POST ["talleta"] )) {
    unset($_SESSION["virheilmoitus"]);
    header ( "location: asetukset.php" );
    exit ();

    }
    elseif (isset ( $_POST ["peruuta"] )) {
    unset($_SESSION["virheilmoitus"]);
    header ( "location: asetukset.php" );
    exit ();
    } else {
    }

    Добавлено спустя 21 минуту 26 секунд:
    я наверное, не правильно объяснила.... надо использовать форму для отправки.... и надо например чтобы сессия удалялась, когда пользователь нажал кнопку "удалить" а когда "исправить",чтобы перенаправлялось на страницу анкеты с сохраненной сессией.
     
  12. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Тут придется сделать 3 формы и 3 кнопки и все заработает.
    Либо просто 3 кнопки и js обработчик который будет смотреть какую кнопку жмем, а уже внутри будет слать одну из нажатых кнопок.
     
  13. mr.akv

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

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Почему? Можно и одной формой обойтись, а на сервере делать проверку присланных данных.
    у кнопки есть name
    Код (PHP):
    1. <input class="red" type="submit" name="peruuta" value="Peruuta">
    А на сервере смотреть, какая кнопка сработала:
    Код (PHP):
    1. if(isset($_POST['peruuta']))
    Добавлено спустя 5 минут 24 секунды:А. Стоп. Так она так и делает, госпаде.

    Код (PHP):
    1. if (isset($_POST["исправить_информацию_o_себе"])) { // вот здесь я написала по русски, может так понятнее...
    2. header("Location: анкета.php");
    3. exit();
    4. }
    5. if (isset($_POST["talleta"])) {
    6. unset($_SESSION["virheilmoitus"]);
    7. header("Location: asetukset.php");
    8. exit();
    9. }
    10. if (isset($_POST["peruuta"])) {
    11. unset($_SESSION["virheilmoitus"]);
    12. header("Location: asetukset.php");
    13. exit();
    14. }
     
  14. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Тьфу блин... я о печатался 1 форму и 3 кнопки.
    У нее формы нет.
     
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.769
    Адрес:
    :сердА
    varvara, убедительная просьба пройти по ссылке у меня в подписи и прочитать пункт 8. Все остальные тоже желательно, на всякий случай, но пункт 8 - особенно.
     
  16. varvara

    varvara Новичок

    С нами с:
    20 апр 2015
    Сообщения:
    7
    Симпатии:
    0
    да,спасибо большое, учту замечание по поводу оформления темы.... И еще раз спасибо большое за помощь..... разобралась с вашей помощью)))
     
  17. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Код (PHP):
    1. exit(header("Location: анкета.php"));
    ;)

    Код (PHP):
    1. if ((isset($_POST["исправить_информацию_o_себе"]) && ($info=true) && $loc='анкета.php') || (isset($_POST["talleta"]) || isset($_POST["peruuta"])) && $loc='asetukset.php') {
    2.     if(!isset($info)) {
    3.         unset($_SESSION["virheilmoitus"]);
    4.     }
    5.     exit(header('Location: '.$loc));
    6. } 
    Ну это так... =)))
     
  18. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    rodent90, у Вас явно нет начальника, - за один только "exit(header(...))" Вас надо бы уволить. ;)
    Вот наплодят такие "индусы" кода кучу, а нам потом разгребай. :(
     
  19. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.769
    Адрес:
    :сердА
    Тоже вижу такое впервые, но в чем принципиальная разница между выставлением локейшена и, затем exit'а и между выставлением локейшена внутри экзита? Все равно офдоки рекомендуют экзит делать после переадресации.
     
  20. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Разница в стиле кода, которой влияет на чтение его логики. Один и тот же эффект можно получить разными способами, - простым/логичным, сложным, заковыристым и т.д.
    Достижение результата странными/заковыристыми/нелогичными способами называется "индусским" кодом. У rodent90 типичный индусский код.
     
  21. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.769
    Адрес:
    :сердА
    Ну хз, конкретно в
    Код (Text):
    1.  exit(header('Location: '.$loc));
    Лично я не вижу ничего неочевидного и странного.
     
  22. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Это плохо, что Вам не чужд индусский код :(
    В частности, использование процедуры как функции. В классических языках за такую вольность компилятор по рукам бы надавал, большой толстой линейкой. :)
     
  23. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    отправили заголовок. вышли.
    или
    вышли со статусом, равным результату выполнения функции отправки заголовка...
    к слову хидер ничего не возвращает (войд) следовательно её использование в контексте генератора статуса выходя является бессмысленным. ну и как бы слишком неочевидный кусок кода получается.
     
  24. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.769
    Адрес:
    :сердА
    А стоп, header же не возвращает никаких значений. Да, тогда согласен, индусово немного.
    Сомневаюсь.
    Тут, на деле нет ничего сверхъестественного, exit ждет на вход параметр, вместо параметра вызов функции, который будет выполнен, после чего неявно будет возвращено undefined. Или void в классических языках.

    С точки зрения логики это не отличается от какого-нить
    Код (Text):
    1. exit(get_reason());// где get_reason() возвращает причину, по которой был инициирован выход.
    Тут по пальцам давать не за что. Разве что в классическом языке у входящего параметра строгий тип, тогда да.

    Добавлено спустя 1 минуту:
    В общем да, согласен, такая конструкция не очень правильная.
     
  25. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Chushkin, Так и скажи правда тебя закалола, ты увидел, скрипт и никогда до этого не догадывался.

    Эм. Возвращения нет. Окай. Но exit'у оно и не обязательно.
    Код (PHP):
    1. $var=... || exit(header(...));
    2. if($var) {
    3. ...
    4. }