Анализ строковой переменной

  • Автор темы Автор темы NickD
  • Дата начала Дата начала

NickD

Новичок
Добрый день, знатоки PHP!
Не могу понять в чём проблема. Есть строковая переменная $str
Проверяются её первые 2 символа и, в зависимости от проверки, производится действие.
Привожу код, производящий проверку:
Код:
 if(eregi("u", $str[0]))  { if(eregi("[r-z]", $str[1])) {echo "условие 1 выполнено, продолжаем";} }
 
 elseif(eregi("u", $str[0]))  { if(eregi("[a-i,0-9]", $str[1])) {echo "условие 2 выполнено, продолжаем";} }

 elseif(eregi("u", $str[0]))  { if(eregi("[j-m]", $str[1])) {echo "условие 3 выполнено, продолжаем";} }

 
 else { print "условия не выполнены, стоп"; break; }
При работе, если условия не выполняются, не происходит остановка!
Не могу понять почему. Заранее благодарю за помощь.
 
вот это
PHP:
else { print "условия не выполнены, стоп"; break; }
сработает только если не выполняется условие eregi("u", $str[0]), потому что прочие ИФы у тебя вложенные.
Перепиши как
PHP:
if ( eregi("u", $str[0])  &&  eregi("[r-z]", $str[1]) ) {
    echo "условие 1 выполнено, продолжаем";
} elseif ( ... ) {
    ......
}else { 
    print "условия не выполнены, стоп"; break; 
}
 
NickD индус? :-)

1. форматируем нормально код:
PHP:
if (eregi("u", $str[0])) {
    if (eregi("[r-z]", $str[1])) {
        echo "условие 1 выполнено, продолжаем";
    }
} elseif (eregi("u", $str[0])) {
    if (eregi("[a-i,0-9]", $str[1])) {
        echo "условие 2 выполнено, продолжаем";
    }
} elseif (eregi("u", $str[0])) {
    if (eregi("[j-m]", $str[1])) {
        echo "условие 3 выполнено, продолжаем";
    }
} else {
    print "условия не выполнены, стоп"; break;
}

почему в if и elseif проверяется одно и то же условие?

2. if (eregi("u", $str[0])) ... точно индус

3. ereg* функции давно deprecated вместо них используйте ф-ции preg_*
 
Функции ereg потенциально уязвимы к нуль-байту на старых версиях пхп, крайне не рекомендую их использование. Кроме того в php 5.3 они считаются deprecated.
 
почему в if и elseif проверяется одно и то же условие?

2. if (eregi("u", $str[0])) ... точно индус

Проверяется сразу 2 условия. И при чём здесь индус?

Не можешь конкретно подсказать - лучше промолчи и уважай участников форума.

Ещё раз большое спасибо gerasim - всё получилось.
 
NickD
уважать участников форума - это как минимум форматировать свой код, который вы постите на форум
(кстати после этого вы бы и сами скорее всего заметили свою ошибку)
в хороших IDE (например netbeans) код форматируется простым нажатием комбинации клавиш - напр. Alt-Shift-F

И при чём здесь индус?
http://lurkmore.ru/Индусский_код

2. if (eregi("u", $str[0])) ...
практически здесь всего лишь проверяются на равенство два символа - использование рег.. выражений тут не оправдано
можно заменить на if('u' == strtolower($str[0])) ...
 
NickD
в хороших IDE (например netbeans) код форматируется простым нажатием комбинации клавиш - напр. Alt-Shift-F

практически здесь всего лишь проверяются на равенство два символа - использование рег.. выражений тут не оправдано
можно заменить на if('u' == strtolower($str[0])) ...

За IDE Netbeans - спасибо! Просто не знал об этом.
Жизнь заставила на старости лет обратить взор на PHP и не всё понятно.
Относительно символов - их там больше. Просто пример привёл упрощённый.
 
Сверху