Расширение Ctype предоставляет набор функций, которые используются для проверки правильности типа символов в строке. В этой статье мы рассмотрим синтаксис, используемый функциями символьного типа, посмотрим, какие конкретные функции существуют, и как они используются для выполнения проверки.
Расширение включено по умолчанию, если вы используете PHP 4.2 или выше. Если вы по какой-то безумной причине не можете себе представить, что это расширение работает с вашей установкой, вы можете использовать параметр компиляции --disable-ctype
чтобы отключить его.
Если у вас есть опыт работы в C, то вы, вероятно, уже знакомы с функциями символьного типа, потому что именно отсюда они берутся (не забывайте, что PHP на самом деле написан на C). Но если вы знакомы с Python, то справедливо отметить, что функции PHP Ctype не имеют абсолютно никакого отношения к библиотеке Python ctypes. Это просто одно из тех трагических и абсолютно неизбежных сходств имен.
Итак, как это работает?
Это все очень просто. Как я уже отмечал ранее, функции проверяют строковое значение, чтобы увидеть, находятся ли символы в заданном диапазоне или каждый символ имеет соответствующий тип. Например, вы можете использовать эти функции, чтобы увидеть, содержит ли строка только заглавные буквы, или числовую, или состоит из шестнадцатеричных символов, или один из дюжины других доступных вариантов.
Вы должны усердно следить за тем, чтобы всегда передавать строку. Конечно, вы можете передавать целые числа, но вы настраиваете себя на неприятности, как указано в руководстве по PHP на странице каждой функции:
Если задано целое число от -128 до 255 включительно, оно интерпретируется как значение ASCII одного символа (к отрицательным значениям добавляется 256, чтобы разрешить символы в расширенном диапазоне ASCII). Любое другое целое число интерпретируется как строка, содержащая десятичные цифры целого числа.
Этот пример со ctype_digit()
иллюстрирует эффект этого:
<?php $numeric_string = "42"; $integer = 42; ctype_digit($numeric_string); // true ctype_digit($integer); // false (ASCII 42 is '*') is_numeric($numeric_string); // true is_numeric($integer); // true
Если мы посмотрим на код выше, первая строка оценивается как true. Второе утверждение, однако, неверно. Это правда, что 42 является целым числом, но оператор ctype оценивает его как один символ ASCII, который в данном случае является звездочкой.
Конечно, функции типа C не являются единственным способом проверки данных. Вы также можете использовать функцию is_numeric()
, в зависимости от ваших потребностей. Он обрабатывает число как просто число и возвращает истинное значение, как показано ниже:
<?php is_numeric($numeric_string); // true is_numeric($integer); // true
Есть также другие функции is_*
, включая is_float()
, is_integer()
и т. Д.
Почему мы говорим о is_*
здесь? Просто чтобы напомнить вам, что существует более одного способа кожи кошки. На самом деле, в сегодняшнем возрасте я, вероятно, не должен так говорить. Это просто выражение. Не снимайте кожу с вашей кошки, а затем скажите всем, что это была моя идея. Просто есть несколько способов сделать что-то.
Какие функции доступны
Я намекнул, что доступен широкий спектр проверок, но какие именно функции доступны? Какой вид проверки доступен? Список ниже.
-
ctype_alnum()
— проверять буквенно-цифровые символы (A — Z, верхний или нижний регистр, 0-9, без специальных символов, знаков пунктуации или других странностей). -
ctype_alpha()
— проверить наличиеctype_alpha()
алфавита (AZ, прописные или строчные буквы). -
ctype_cntrl()
— проверяет наличие управляющих символов (например,n
и т. д.). -
ctype_digit()
— проверять числовые символы (0-9, без десятичной точки, запятая и т. д.). -
ctype_graph()
— проверить наличие визуально печатаемых символов (не управляющих символов или пробела). -
ctype_lower()
— проверять строчные буквы (только строчные буквы az, без цифр). -
ctype_print()
— проверить наличие печатаемых символов, включая управляющие символы и пробел. -
ctype_punct()
— проверяет символы типа пунктуации (без цифр, букв или пробелов). Как правило, они включают в себя многие символы «ругательства», которые мы часто называем «специальными» символами. @ & #! -
ctype_space()
— проверяет наличие пробельных символов (включает пробелы и любой управляющий символ, оставляющий пробел на странице, такой как «Узкий пробел без пробелов» и «Разделитель гласных Монголии»). -
ctype_upper()
— проверяет наличие заглавных символов (только заглавные буквы AZ, никаких цифр или специальных символов). -
ctype_xdigit()
— проверить наличие шестнадцатеричных символов.
Как использовать их
Использовать функции Ctype довольно просто. Вы просто устанавливаете его, как правило, в операторе if, иногда встроенном в цикл, если тестируете несколько значений из массива, а затем проверяете, является ли результат вызова функции истинным или ложным. Истина означает, что каждый символ в этой строке является типом символа, который вызывается этой конкретной функцией.
Вот пример:
<?php if (ctype_alnum($string)) { echo "This string totally works"; } else { echo "And this one not so much"; }
Если значение $string
равно «Azxc1234», вы увидите сообщение, что оно работает. Если $string
«123 # Axy», то не будет, потому что # не является буквенно-цифровым символом.
Обратите внимание, что если вы передадите пустую строку, функции будут иметь значение false в PHP 5.1 и выше, но true, если вы используете более раннюю версию (просто еще одна причина для обновления сейчас!).
А также не забудьте убедиться, что входные данные для функции Ctype — это строка! Если есть сомнения, нет никакого вреда в его использовании.
<?php $integer = 42; ctype_digit($integer); // false ctype_digit((string)$integer); // true
Вывод
И это все, что нужно сделать! Функции должны быть неотъемлемой частью вашей установки PHP (если нет, то вам определенно нужно обновить или прекратить устанавливать странные настройки PHP). И они просты в использовании, если вы только вводите строки.
Так где бы вы их использовали? Что ж, в любое время вам нужно вывести строку из формы, которую вы можете использовать для проверки достоверности данных, с которыми вы имеете дело. Действительно, небо это предел. (К счастью, мне не нужно занимать публичную или личную позицию по поводу того, для чего вы их используете; я просто говорю, что это за функции и как их использовать).
Изображение через Fotolia