php проверка на количество символов в строке

четверг, 21 июня 2012 г.

Считаем количество символов в строке. PHP

В данной статье я рассмотрю подсчет символов в строке. В обычном случае может применяться стандартная функция strlen(). Но если у вас кириллица, то есть используется кодировка UTF-8, данные функции будут работать не так, как бы нам хотелось.
Приведем небольшой пример:

if ( isset ($_POST[ ‘fio’ ]) && strlen($_POST[ ‘fio’ ]’)
echo «Слишком мало информации в поле ‘Фамилия, имя, отчество’!» ;
>
В данном примере мы проверяем данные, отправленные с текстового поля с name = ‘fio’ и если длина строки не превышает 8 символов, надеемся увидеть сообщение о том, что пользователь ввел мало информации и, естественно, не обрабатывать данные дальше.

Если пользователь вводит латиницу или спец. симаолы, то данный пример работает отлично.
Однако, если пользователь, например, будет работать с кириллицей (что нам и нужно), то при вводе даже 5 символов данное условие не сработает.

Посмотрим, что же тут не так. Введём, например, в тестовое поле слово ‘тест’ и обработаем следующим образом:

Получаем: Количество введённых символов: 8

Причина такого расхождения в ожидаемой и реальной длине — размер кириллических символов в UTF-8: по 2 байта вместо 1 для латинских. Функция strlen() считает длину строки в байтах, а не в буквах, и если буква занимает два байта, она засчитывается за две.

Решение первое. Используем функцию iconv_strlen(), которая возвращает число символов в строке.

Синтаксис функции:
int iconv_strlen (string str [, string charset])

В отличие от strlen(), iconv_strlen() подсчитывает число символов на основании кодировки, переданной во втором не обязательном параметре, а не как простой подсчёт байтов в строке.

Необязательный параметр charset указывает кодировку, в которой следует интерпретировать строки. Если он опущен, по умолчанию, будет использоваться кодировка, определённая в iconv.internal_charset.

Теперь, если мы перепишем наш последний пример следующим образом, то получим:

Ввод пользователя: ‘тест’.

Получаем: Количество введённых символов: 4

Решение второе. Используем функцию mb_strlen().

Проверим работу этой функции на нашем примере:

Ввод пользователя: ‘тест’.
Получаем: Количество введённых символов: 4

Источник

Как в PHP количество символов подсчитать и определить свой талант

Дата публикации: 2017-06-23

php проверка на количество символов в строке. Смотреть фото php проверка на количество символов в строке. Смотреть картинку php проверка на количество символов в строке. Картинка про php проверка на количество символов в строке. Фото php проверка на количество символов в строке

От автора: краткость – сестра таланта, «засевшего» в Twitter! Сегодня я попытаюсь создать программный «тренажер», который позволит выработать у пользователей привычку изъясняться кратко. Для этого нужно научиться подсчитывать с помощью PHP количество символов.

Набираем форму

Сначала нам нужно набрать «форму». Так сказать, привести в тонус свои мозговые мышцы. Для этого потренируемся в верстке веб-формы для тренажера:

Так форма для счета знаков в строке выглядит в браузере:

php проверка на количество символов в строке. Смотреть фото php проверка на количество символов в строке. Смотреть картинку php проверка на количество символов в строке. Картинка про php проверка на количество символов в строке. Фото php проверка на количество символов в строке

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

php проверка на количество символов в строке. Смотреть фото php проверка на количество символов в строке. Смотреть картинку php проверка на количество символов в строке. Картинка про php проверка на количество символов в строке. Фото php проверка на количество символов в строке

Обрабатываем

Теперь переходим к написанию обработчика для формы. Вот его первый вариант:

php проверка на количество символов в строке. Смотреть фото php проверка на количество символов в строке. Смотреть картинку php проверка на количество символов в строке. Картинка про php проверка на количество символов в строке. Фото php проверка на количество символов в строке

Чтобы определить длину текста, мы использовали функцию strlen(). В качестве параметров она принимает строку и возвращает число знаков в ней.

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

php проверка на количество символов в строке. Смотреть фото php проверка на количество символов в строке. Смотреть картинку php проверка на количество символов в строке. Картинка про php проверка на количество символов в строке. Фото php проверка на количество символов в строке

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Нивелируем проблему кодировки

Чтобы «нивелировать» эту проблему, применим другую функцию – iconv_strlen(). В отличие от предыдущей эта позволяет посчитать число знаков с учетом используемой кодировки. В следующем примере демонстрируется разница количества символов в одной и той же строке, но в разных кодировках:

Источник

strlen

(PHP 4, PHP 5, PHP 7, PHP 8)

strlen — Возвращает длину строки

Описание

Список параметров

Строка ( string ), для которой измеряется длина.

Возвращаемые значения

Примеры

Пример #1 Пример использования strlen()

Примечания

Функция strlen() возвратит количество байт, а не число символов в строке.

Смотрите также

User Contributed Notes 8 notes

I want to share something seriously important for newbies or beginners of PHP who plays with strings of UTF8 encoded characters or the languages like: Arabic, Persian, Pashto, Dari, Chinese (simplified), Chinese (traditional), Japanese, Vietnamese, Urdu, Macedonian, Lithuanian, and etc.
As the manual says: «strlen() returns the number of bytes rather than the number of characters in a string.», so if you want to get the number of characters in a string of UTF8 so use mb_strlen() instead of strlen().

// the Arabic (Hello) string below is: 59 bytes and 32 characters
$utf8 = «السلام علیکم ورحمة الله وبرکاته!» ;

The easiest way to determine the character count of a UTF8 string is to pass the text through utf8_decode() first:

We just ran into what we thought was a bug but turned out to be a documented difference in behavior between PHP 5.2 & 5.3. Take the following code example:

?>

This is because in 5.2 strlen will automatically cast anything passed to it as a string, and casting an array to a string yields the string «Array». In 5.3, this changed, as noted in the following point in the backward incompatible changes in 5.3 (http://www.php.net/manual/en/migration53.incompatible.php):

«The newer internal parameter parsing API has been applied across all the extensions bundled with PHP 5.3.x. This parameter parsing API causes functions to return NULL when passed incompatible parameters. There are some exceptions to this rule, such as the get_class() function, which will continue to return FALSE on error.»

So, in PHP 5.3, strlen($attributes) returns NULL, while in PHP 5.2, strlen($attributes) returns the integer 5. This likely affects other functions, so if you are getting different behaviors or new bugs suddenly, check if you have upgraded to 5.3 (which we did recently), and then check for some warnings in your logs like this:

strlen() expects parameter 1 to be string, array given in /var/www/sis/lib/functions/advanced_search_lib.php on line 1028

If so, then you are likely experiencing this changed behavior.

When checking for length to make sure a value will fit in a database field, be mindful of using the right function.

There are three possible situations:

1. Most likely case: the database column is UTF-8 with a length defined in unicode code points (e.g. mysql varchar(200) for a utf-8 database).

Find the character set used, and pass it explicitly to the length function.

There’s a LOT of misinformation here, which I want to correct! Many people have warned against using strlen(), because it is «super slow». Well, that was probably true in old versions of PHP. But as of PHP7 that’s definitely no longer true. It’s now SUPER fast!

I created a 20,00,000 byte string (

20 megabytes), and iterated ONE HUNDRED MILLION TIMES in a loop. Every loop iteration did a new strlen() on that very, very long string.

The result: 100 million strlen() calls on a 20 megabyte string only took a total of 488 milliseconds. And the strlen() calls didn’t get slower/faster even if I made the string smaller or bigger. The strlen() was pretty much a constant-time, super-fast operation

So either PHP7 stores the length of every string as a field that it can simply always look up without having to count characters. Or it caches the result of strlen() until the string contents actually change. Either way, you should now never, EVER worry about strlen() performance again. As of PHP7, it is super fast!

Here is the complete benchmark code if you want to reproduce it on your machine:

Источник

substr_count

(PHP 4, PHP 5, PHP 7, PHP 8)

substr_count — Возвращает число вхождений подстроки

Описание

Эта функция не подсчитывает перекрывающиеся подстроки. Смотрите пример ниже!

Список параметров

Строка, в которой ведётся поиск

Смещение начала отсчёта. Если задано отрицательное значение, отсчёт позиции будет произведён с конца строки.

Возвращаемые значения

Эта функция возвращает целое число ( int ).

Список изменений

Примеры

Пример #1 Пример использования substr_count()

Смотрите также

User Contributed Notes 10 notes

500KB string on our web server. It found 6 occurrences of the needle I was looking for in 0.0000 seconds. Yes, it ran faster than microtime() could measure.

Looking to give it a challenge, I then ran it on a Mac laptop from 2010 against a 120.5MB string. For one test needle, it found 2385 occurrences in 0.0266 seconds. Another test needs found 290 occurrences in 0.114 seconds.

Long story short, if you’re wondering whether this function is slowing down your script, the answer is probably not.

Making this case insensitive is easy for anyone who needs this. Simply convert the haystack and the needle to the same case (upper or lower).

To account for the case that jrhodes has pointed out, we can change the line to:

array (
0 => «mystringth»,
1 => «atislong»
);

It was suggested to use

instead of the function described previously, however this has one flaw. For example this array:

array (
0 => «mystringth»,
1 => «atislong»
);

If you are counting «that», the implode version will return 1, but the function previously described will return 0.

Yet another reference to the «cgcgcgcgcgcgc» example posted by «chris at pecoraro dot net»:

Your request can be fulfilled with the Perl compatible regular expressions and their lookahead and lookbehind features.

This will handle a string where it is unknown if comma or period are used as thousand or decimal separator. Only exception where this leads to a conflict is when there is only a single comma or period and 3 possible decimals (123.456 or 123,456). An optional parameter is passed to handle this case (assume thousands, assume decimal, decimal when period, decimal when comma). It assumes an input string in any of the formats listed below.

below was suggested a function for substr_count’ing an array, yet for a simpler procedure, use the following:

Unicode example with «case-sensitive» option;

In regards to anyone thinking of using code contributed by zmindster at gmail dot com

Please take careful consideration of possible edge cases with that regex, in example:

This would cause a infinite loop and for example be a possible entry point for a denial of service attack. A correct fix would require additional code, a quick hack would be just adding a additional check, without clarity or performance in mind:

Источник

Полезные PHP коды — для новичков

При написании кода в PHP есть задачи, которые встречаются чаще остальных или просто как-то выделяются из общего множества. В этой статье поговорим о некоторых из них.

Тут собрана лишь малая часть, и наверное это не последняя статья на тему несложных популярных задачек в PHP. Кроме того, я планирую дополнять эту статью.

Короткая запись операторов присваивания

Время выполнения PHP скрипта

Округление дробных чисел

Округление до целых

Чтобы округлить число в php существует несколько функций:

Округление до дробных

Округление последнего числа происходит как в математики: если следующее больше или равно 5 то в большую сторону, в остальных случаях в меньшую.

Целая часть и остаток от деления чисел

Чтобы получить остаток от деления можно воспользоваться оператором % :

Числа кратные к N или каждый N-ый блок в цикле

Нужно разделить число на число и если остатка нет, то первое число делиться нацело на второе, а значит кратное.

Где применить эту кратность?

Допустим, есть цикл записей и нужно к каждому третьему блоку добавить отдельный css класс. Тут-то кратность нам и поможет.

Форматирование чисел (денег) в PHP

Форматирует число с разделением групп.

number(обязательный)
Число, которое нужно отформатировать.

decimals
Сколько знаков после запятой показывать.

dec_point
Разделитель для дробной части.

Для форматирования с учетом языка сайта в WordPress есть специальная функция number_format_i18n()

Для вывода денежных величин используйте похожую функцию money_format()

Как получить ключи или значения ассоциативного PHP массива

Это может пригодится когда нужно сделать поиск по ключам массива. В PHP такой встроенной функции нет.

Создаем массив из диапазона чисел или букв

Как получить максимальное или минимальное число из массива в PHP

Также можно передать массив из чисел, тогда мин. или макс. число будет выбрано из значений массива.

Как получить часть строки (подстроку)

Однако нужно знать, что скорость их работы в разы ниже: substr() работает с одинаковой скоростью для строки любой длинны. А вот mb_substr() и iconv_substr() работают тем медленнее чем длине строка в них указывается. В среднем они в 5-10 раз медленнее, однако альтернатив нет, если нужно обработать кириллицу, придется использовать их.

Количество символов в строке

Как посчитать сколько раз встречается одна строка в другой

Удаление символов внутри строки

Сделать это можно многими способами, но самый простой это функция str_replace() :

Удаление символов на концах строки

Также, не все знают что есть аналогичные функции:

Удаление пустых символов на концах строки
Удаление указанных символов в начале и конце строки

Как перевернуть строку в PHP

День недели и месяц по-русски на PHP

Месяц по-русски

День недели

Есть что добавить? Милости прошу в комментарии.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *