Четверг, 16.05.2024, 14:22
DigitalBox
Приветствую Вас Гость | RSS
Главная Проверка условий Регистрация Вход
Меню сайта

Проверка условий



Условия (condition) — это выражения, которые могут принимать два значения: истина пли ложь. Условия применяются в сложных операторах для того, чтобы определить, выполнять последующий блок кода или нет. Для проверки условий необходимо сравнить некоторые значения. При этом возможны следующие варианты вопросов:

  • Равны ли два значения? Имеет ли Бобби ту же фамилию, что и Салли? Достиг ли Ник 15-летнего возраста?
  • Больше или меньше одно значение другого? Младше ли Ник, чем Бобби? Стоит ли дом Салли больше одного миллиона долларов?
  • Соответствует ли строка шаблону? Начинается ли имя Бобби с буквы С? Состоит ли почтовый индекс из пяти цифр?

Можно проверять условия, состоящие из нескольких вопросов. Рассмотрим такие примеры. Верно ли, что Ник старше Бобби и младше Салли? Верно ли, что сегодня воскресенье и солнечный день? Верно ли, что сегодня воскресенье или понедельник?

В РНР имеется набор операций, предназначенных для сравнения значений:

Операция Описание
==Равнозначны ли значения двух переменных?
===Одинаковы ли как значения, так и типы двух переменных?
>Больше ли первое значение, чем второе?
>=Верно ли, что первое значение не меньше второго?
<Меньше ли первое значение, чем второе?
<=Верно ли, что первое значение не больше второго?
! = или <>Не равны ли значения двух переменных?
! ==Не одинаковы ли значения или типы данных двух переменных?

Сравнивать можно как числовые значения, так и строковые. Текстовые строки ранжируются в алфавитном порядке, причем строки, которые начинаются с прописных букв, предшествуют строкам, начинающимся со строчных, например SS идет перед Sa. Символы пунктуации также имеют свой порядок следования, и можно говорить о том, что один символ "больше" другого. Однако такое сравнение, например запятой и точки, не имеет большого практического значения.

Текстовые строки можно сравнивать на основе ASCII-кодов. Каждый символ имеет свой ASCII-код, который соответствует целому числу от 0 до 127. И соответственно сравнение текстовых строк осуществляется на основе этого кода. Например, код, соответствующий запятой, равен 44, а точке — 46. Таким образом, можно сказать, что точка "больше" запятой.

Рассмотрим несколько примеров правильных выражений проверки на истинность в РНР:

  • $а == $Ь
  • $аgе != 21
  • $ageNick < $ageBobby
  • $house_price >= 1000000

Операция сравнения, проверяющая равенство двух значений, состоит из двух символов равенства (==). Одной из наиболее частых ошибок является использование для сравнения одного знака равенства (=). В этом случае происходит присваивание значения переменной. Так, в выражении if($weather = "дождливая") значение переменной $weather станет равным "дождливая", сравнение производиться не будет, и результат этого оператора всегда будет истинным.

РНР проверяет условие и возвращает булево значение: TRUE (истина) или FALSE (ложь). Рассмотрим следующее выражение:

$а == $b

Если, например, $а = 1 и $Ь = 1, то это выражение будет истинным, а в случае $а = 1 и $Ь = 2 — ложным.

Для отрицания при сравнении используется операция восклицания (!). Рассмотрим следующий фрагмент кода:

$аgе != 21

В этом выражении проверяется, не равно ли значение переменной $аgе числу 21. Еслли, например, $аgе = 20, это условие истинно.


Проверка содержимого переменной

Иногда необходимо проверить, существует ли переменная или какое она имеет значение. Ниже приведены функции, позволяющие выполнить такие действия:

isset($имя_переменной)    #Истина, если переменная
#объявлена даже без присваивания значения.
empty($имя_переменной)  #Истина, если значение переменной
#равно нулю или пустой строке,
#либо переменная не объявлена.

РНР также позволяет проверить тип переменной. Например, для того чтобы проверить, является ли переменная целочисленной, следует воспользоваться функцией is_int($number)

Результатом выполнения этой функции является TRUE, если переменная $number имеет тип integer. Рассмотрим подобные функции:

  • is_array($var2) проверяет, является ли переменная $var2 массивом.
  • is_float($number) проверяет, является ли переменная $number числом с плавающей точкой.
  • is_null ($var1) проверяет, равно ли значение переменной $var1 нулю.
  • is_numeric($string) проверяет, является ли переменная $string числовой строкой.
  • is_string($string) проверяет, является ли переменная $string строкой.

Для проверки обратных условий следует воспользоваться символом восклицания (!). Например, при обработке следующего выражения будет получено значение TRUE, если переменная не объявлена:

!isset($имя_переменной)


Использование регулярных выражений

Зачастую необходимо проверить, обладает ли текстовая строка определенными характеристиками, а не просто совпадает с конкретным значением. Например, нужно найти строки, начинающиеся с символа S или содержащие числа. В этом случае строки сравниваются с неким шаблоном. Такие выражения называются регулярными (regular expression).

Возможно, вам уже приходилось использовать регулярные выражения. Например, при поиске файлов символ звездочки (*) часто используется для обозначения любого символа или нескольких символов (dir ex*.doc или ls ex*.txt). В этом случае ex*. txt является шаблоном, которому соответствуют такие строки, как exam.txt, ехЗЗ. txt и ехЗх4.txt. Проверка регулярных выражений, конечно же, посложнее, чем просто использование символа звездочки.

Одним из наиболее частых применений регулярных выражений является проверка данных, введенных пользователями с помощью форм. Если информация не удовлетворяет определенному формату (шаблону), ее не следует сохранять в базе данных. Например, если пользователь вводит почтовый индекс, он должен состоять либо из пяти цифр, либо еще включать четыре дополнительные цифры через дефис. Другими словами, с помощью регулярных выражений можно проверить, соответствует ли введенная информация нужному шаблону. Если нет — необходимо заставить пользователя ввести ее заново, в корректной форме.


Использование в шаблоне специальных символов

Обычно шаблоны состоят из буквенных (литеральных) и специальных символов. Буквенные символы не имеют какого-то специального назначения. Например, символ е определяет букву е как одну из 26 букв алфавита. В то же время специальные символы имеют в шаблонах свое функциональное назначение. Например, символ звездочки заменяет любой другой символ или несколько вхождений этого символа. В таблице ниже приведен список и краткое описание специальных символов, использующихся в шаблонах.

СимволНазначениеПримерСоответствует шаблонуHe соответствует
шаблону

^ Начало строки экзаменматематический
экзамен
$ Конец строкин$ экзамен экзамены
. Любой одиночный символ..до, от
Более длинные слова
также соответствуют
этому шаблону, поскольку
включают текстовую
строку из двух символов

а, 2
?Предшествующий символ является
не обязательным
ger?m germ, gem geam
( )Группирует буквенные символы в
последовательность, которую в
точности должна содержать строка
g(er)m germ Gem, grem
[ ]Включает набор необязательных
символов
g[er]m gem, grm germ, gel
[ ^ ]Определяет все символы, кроме
указанных
g[^er]mgym, gumgem, grem, germ
-Включает диапазон всех символов,
заключенных между двумя (ряд
возможных символов)
g[a-c]m gam, gbm, gem gdm, gxm, gal
+Один или несколько наборов
предшествующих символов
bldg[1-3]+ bldg111, bldg132 bldg, bldg555
*Один, ни одного или несколько
вхождений предшествующего
символа
ge*m gm, geeem germ, grm
{n}Повторение n разge{5}mgeeeeem geeeem, geeeeeem
{n1,n2)Определяет диапазон повторений
символа (символов)
а{2,5}aa, aaa, aaaa, 145aaaaa l, a3
\Определяет буквенный символg\*m g*m gem, germ
( | | ) Набор альтернативных строк(Сэм|Салли) Салли Сара,Салмон


Некоторые примеры шаблонов

Для создания достаточно сложных шаблонов используются различные комбинации буквенных и специальных символов. Текстовая строка сравнивается с созданным шаблоном, и в случае их взаимного соответствия возвращается истинное значение (TRUE). Рассмотрим различные примеры шаблонов, а также соответствующих и несоответствующих им текстовых строк.

Пример 1

^[А-Яа-я] .*

Этот шаблон определяет строки, начинающиеся с букв, и состоит из двух частей.

  • ^[А-Яа-я]. Первая часть определяет, что строки должны начинаться с букв (как верхнего, так нижнего регистра).
  • .*. Вторая часть указывает на то, что строка должна состоять из одного или нескольких символов.

Этому шаблону удовлетворяют следующие текстовые строки: играй в футбол, Сэм и Я. Такие строки, как 123 и ?, ему не соответствуют.

Пример 2

Уважаемый (Ким|Рикки)

Этот шаблон определяет две различные строки и состоит из двух частей.

  • Уважаемый. Первая часть соответствует простому набору букв.
  • (Ким | Рикки). Вторая часть соответствует либо значению Ким, либо Рикки.

Шаблону Уважаемый (Ким| Рикки) соответствуют текстовые строки Уважаемый Ким и Уважаемый Рикки. Такие выражения, как Уважаемый Боб и Ким, не удовлетворяют этому шаблону.

Пример 3

^[0-9]{5}(\-[0-9]{4})?$

Этот шаблон определяет общий формат почтового индекса и состоит из нескольких частей.

  • ^[0-9]{5}. Первая часть определяет строку, состоящую из пяти цифр.
  • \-. Символ обратной косой черты (\) указывает на то, что дефис (-) в данном случае используется в качестве буквенного, а не специального символа.
  • [0-9]{4}. Эта часть шаблона определяет строку, состоящую из четырех цифр.
  • ( )?. Этот набор символов включает в себя последние две части шаблона и указывает на то, что они являются необязательными.
  • $. Символ доллара ($) является символом конца строки (т.е. после шаблона не должны стоять никакие другие символы).

Этому шаблону удовлетворяют текстовые строки 90001 и 90002-4323. Такие строки, как 9001 и 12-4321, ему не соответствуют.

Пример 4

^.+@.+\.соm$

Этот шаблон определяет любую строку, содержащую символ @ и имеющую окончание .com. Другими словами, он задает адрес электронной почты. Этот шаблон состоит из следующих частей.

  • ^.+. Первая часть определяет строку, которая начинается с любого символа и предшествует символу @.
  • @. Этот символ является буквенным, а не специальным, поэтому нет необходимости ставить перед ним символ обратной косой черты (\).
  • .+. Этот набор специальных символов определяет строку, состоящую из одного или нескольких символов.
  • \.. Символ \ указывает на то, что символы точки (.) должны интерпретироваться как буквенные символы.
  • com$. Эта часть шаблона определяет, что строка должна обязательно заканчиваться символами com.

Такому шаблону удовлетворяют текстовые строки you@yourcompany.com и johndoeSsomedomain.com. Такие строки, как you@yourcompany.net, you@.com и @you.com, ему не соответствуют.


Сравнение строк с шаблоном

Для сравнения строк с шаблоном можно воспользоваться функцией ereg(). Её синтаксис имеет следующий вид:

ereg("шаблон", значение);

Например, для того чтобы проверить правильность имени, введенного пользователем в форме, необходимо сравнить переменную $name (в которой оно хранится) с шаблоном:

ereg("^[А-Яа-я' -]+$", $name)

Данный шаблон интерпретируется следующим образом:

  • Символы ^ и $ определяют начало и конец текстовой строки соответственно. Это означает, что строка должна полностью соответствовать созданному шаблону.
  • Все разрешенные буквенные символы строки заключаются в квадратные скобки. К ним относятся буквы верхнего и нижнего регистров, апостроф, пробел и дефис. В пределах квадратных скобок можно задавать область изменения символов (например, А-Я). При этом дефис интерпретируется не как буквенный, а как специальный символ. Для того чтобы изменить это правило, необходимо, чтобы дефис не был заключен между двумя символами, т.е. его следует разместить в конце, после набора букв.
  • После квадратных скобок следует символ "плюс". Он указывает на то, что строка может содержать любое количество символов, заданных в квадратных скобках, но не меньше одного.

Объединение условий

Часто бывает необходимо проверить несколько условий одновременно. Предположим, например, что компания имеет каталог продуктов на различных языках. Необходимо определить, описаниями каких продуктов интересуется покупатель и на каком языке. Для этого следует объединить несколько условий. Общий синтаксис имеет следующий вид:

условие1 and|or|хоr условие2 and|or|хоr условиеЗ and|or|хоr ...

Условия можно объединять с помощью следующих трех выражений (логических операторов):

  • and (логическое И). Результирующее условие истинно, если истинны оба условия.
  • or (логическое ИЛИ). Результирующее условие истинно, если хотя бы одно из условий истинно.
  • хоr (логическое исключающее ИЛИ). Результирующее условие истинно, если истинно одно из условий, но не оба одновременно.

В таблице ниже приведены примеры сложных условий, состоящих из более простых.

Условие
Истина, если...
$ageBobby == 21 or $ageBobby == 22
Бобби 21 ИЛИ 22 года
$agesaily > 29 and $state == "OR"
Салли больше 29 лет, и она живет штате Орегон
$ageSally > 29 or $state == "OR"
Салли больше 29 лет или она живет штате Орегон
$city == "Рено" xor $state == "OR
Значение переменной $city равно Рено или
значение переменной $stateOR, НО не
одновременно
$name != "Сэм" and $age < 13
Любое имя, кроме Сэм, и возраст не старше 13 лет

Можно объединить любое количество условий. При этом порядок проверки условий следующий: наибольший приоритет имеют выражения, содержащие and, затем хоr и or. Рассмотрим следующее составное условие, состоящее из трех простых:

$resCity == "Рено" or $resState == "NV" and $name == "Салли"

Если имя покупателя Салли и она живет в штате Невада (NV), то результирующее выражение истинно. Тот же результат будет получен и в том случае, если покупатель живет в городе Рено, независимо от его имени. Это условие ложно, если покупатель обитает в Неваде, но его именем является не Салли. Все эти результаты получаются в результате следующего порядка проверки условий:

  1. Обрабатывается выражение, содержащее логическое И(and). Интерпретатор РНР проверяет, равны ли значения переменных $resState и $name соответственно NVи Салли. Если оба значения совпадают, то условие верно и нет необходимости проверять условие, содержащее or. В противном случае РНР переходит к обработке следующего (по приоритету) выражения.
  2. Обрабатывается выражение, содержащее логическое ИЛИ(or). Интерпретатор РНР проверяет значение переменной $resCity. Если оно равно Рено, то условие истинно, иначе — ложно.

Для того чтобы изменить порядок обработки логических операторов, следует воспользоваться скобками ( () ). Тогда условия, заключенные в скобки, будут иметь больший приоритет. Например, предыдущий пример можно переписать следующим образом:

($resCity == "Рено" or $resState == "NV") and $name == "Салли"

В этом случае скобки позволяют изменить порядок проверки условий, т.е. сначала будет с обрабатываться выражение, содержащее логическое ИЛИ(or). Результирующее условие будет истинным в том случае, если имя покупателя Салли и она живет либо в городе Рено либо в штате Невада(NV). Этот результат получен благодаря следующему порядку проверки условий:

  1. Обрабатывается выражение, содержащее логическое ИЛИ(or). Интерпретатор РНР проверяет, равны ли значения переменных $resCity и $resState соответственно Рено и NV. Если оба эти переменные имеют другие значения, то результирующее условие ложно и проверка прекращается. В противном случае РНР переходит к обработке следующего (по приоритету) выражения.
  2. Обрабатывается выражение, содержащее логическое И(and). PHP проверяет значение переменной $name. И если оно равно Салли, то результирующее условие истинна, иначе — ложно.

Скобки стоит использовать даже в тех случаях, когда вы уверены в порядке обработки условий. Лишние скобки не помешают. В противном случае результат проверки условий может оказаться самым неожиданным.

Если вы знакомы с другими языками программирования, например С, то вам, наверное, приходилось использовать такие операторы, как || (в качестве логического ИЛИ or) и && (в качестве логического И and). Эти операторы можно применять и в языке РНР. Например, выражение $а < $Ь && $с > $Ь эквивалентно $а < $b and $с > $Ь. При этом оператор || проверяется перед or, а && — перед and.

Форма входа

Мини-чат

Календарь новостей
«  Май 2024  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031

Поиск

Друзья сайта
Скажи сайту спасибо
ЯндексЯндекс. ДеньгиХочу такую же кнопку



Получить WMR-бонус на свой кошелек!

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Copyright MyCorp © 2024 Бесплатный конструктор сайтов - uCoz