Intereting Posts
WP custom post type can not уже добавлен в корзину в woocommerce 3.0 выше Использование сеанса в пользовательском промежуточном программном обеспечении в laravel Поиск в текстовом режиме MySQLi для нескольких столбцов Я не могу сохранить дату, используя datepicker в моей базе данных Вход пользователя с одним запросом и солью пользователя для каждого пользователя Вход, выход и продолжительность времени в php и mysql? Удаление всех файлов из папки с помощью PHP? получить un espeded POST, а не магические цитируемые значения в wordpress? Сортировка массива несколькими ключами в определенном порядке Каковы параметры «$ ns» и «$ is_prefix»? Каков наилучший способ создать форму загрузки одного файла с помощью PHP? Достигнут предел регулярного выражения PHP (pcre.backtrack_limit) PHP Как правильно разместить большой файл? Что-нибудь похожее на WAMP? PHP. Как динамически изменять содержимое страницы при выборе HTML-действия?

Как проверить, является ли один символ нижним регистром в PHP?

Я хочу реализовать небольшую процедуру, которая генерирует множественную форму имени сущности на испанском языке. В основном, он принимает WordInCSharpCase или wordInJavaCase, такие как MedioDePago (метод оплаты), и он добавляет «s» справа перед первым символом без строчной буквы (исключая первый символ), который в этом случае будет производить строку MediosDePago (Способы оплаты). В C # эта процедура была:

 public string Pluralize(string input) { int i = 0; while (++i < input.Length) if (!char.IsLower(input[i])) break; StringBuilder builder = new StringBuilder(input); builder.Insert(i, 's'); return builder.ToString(); } 

Теперь мне нужно реализовать эту процедуру в PHP, но я не могу найти эквивалент char.IsLower C #. Единственное, что я нашел, это ctype_lower , но в качестве ввода требуется строка , а создание / тестирование / отброс нескольких строк будет слишком неэффективным. Есть ли у PHP функция, которая проверяет, находится ли один символ в нижнем регистре?

Related of "Как проверить, является ли один символ нижним регистром в PHP?"

Ну, во-первых, создание нескольких строк не является неэффективным. Строка является родным типом в PHP, и это довольно эффективно при этом. Я бы сделал что-то вроде этого:

 $callback = function($match) { return $match[1] . 's' . $match[2]; }; $string = preg_replace_callback('/^([A-Za-z][az]*)([AZ]|$)/', $callback, $string); 

Или, как предлагает Кевин в комментариях:

 $string = preg_replace('/^([A-Za-z][az]*)([AZ]|$)/', '\1s\2', $string); 

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

Нет никакой разницы между string и string поэтому использование ctype_lower() абсолютно нормально. На самом деле в PHP нет даже реальной string , string в PHP – это просто куча двоичных данных.

Я действительно не знаю, может ли ctype_lower() работать с расширенными наборами символов и символами вне диапазона ASCII. Если это требование, вы, возможно, должны использовать возможности unicode PCRE для проверки символов более низкого порядка вне диапазона ASCII.

Вы можете использовать mb_strtolower для этого, например:

 $a = 'a'; var_dump(mb_strtolower($a, "UTF-8") == $a); // bool(true) $b = 'A'; var_dump(mb_strtolower($b, "UTF-8") == $b); // bool(false)