Php строка содержит только пробелы

Как проверить, существуют ли только пробелы в строке в PHP?

Эти решения были протестированы на разных платформах.

Флаг u указывает preg_replace () обрабатывать строку как многобайтную строку, а именно utf-8

Характер – это неразрывное пространство C2A0 и может быть сгенерировано с помощью alt + 0160.

Может быть, вы делаете что-то еще, что испортило результаты? Ваш тест возвращает 0

И это ожидаемое поведение обрезки .

  • «» (ASCII 32 (0x20)), обычное пространство.
  • «\ t» (ASCII 9 (0x09)), вкладка.
  • «\ n» (ASCII 10 (0x0A)), новая строка (строка).
  • «\ r» (ASCII 13 (0x0D)), возврат каретки.
  • «\ 0» (ASCII 0 (0x00)), NUL-байт.
  • «\ x0B» (ASCII 11 (0x0B)), вертикальная вкладка.

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

Это вывод hexdump -C

$ hexdump -C space.php 00000000 3c 3f 0d 0a 70 72 69 6e 74 5f 72 28 73 74 72 6c || 00000026 

И это вывод od , только с этим символом в файле.

$ od space.php 0000000 120302 0000002 

trim не удалит это пространство, потому что .. ну, это не пробел. Это хорошая рекомендация о том, как обнаружить необычные персонажи.

О, и чтобы ответить на ваш обновленный вопрос, просто используйте пустой, как сказал Питер.

Я думаю, что самый быстрый способ состоит в том, чтобы обрезать ведущие пробелы ( ltrim будет неудачно быстро, если есть другие символы) и сравнить результат с пустой строкой:

# Check if string consists of only spaces if (ltrim($string, ' ') === '') 

Достаточно простого preg_match ():

Вы можете использовать функцию count_chars или функцию substr_count .

Вы хотите знать, содержит ли строка пробел?

if(strpos($string, ' ') !== false) echo $string.' contains a space'; 
$str = str_replace(array("\n", "\r", "\t", " ", "\o", "\xOB"), '', $str); 
if(strlen(trim($_POST['foobar'])) == 0)
$bar = trim($_POST['foobar']); if(empty($bar))

если trim ($ var) не работает, то $ var может не быть строкой. поэтому сначала бросать в строку

$ var1 = string ($ var), а затем trim ($ var1) .

Источник

ctype_space

Проверяет, все ли символы в переданной строке text являются пробельными.

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

Замечание:

Если передано целое число ( int ) в диапазоне между -128 и 255 включительно, то оно будет обработано как ASCII-код одного символа (к отрицательным значениям будет прибавлено 256 для возможности представления символов из расширенного диапазона ASCII). Любое другое целое число будет обработано как строка, содержащая десятичные цифры этого числа.

Начиная с PHP 8.1.0, передача нестроковых аргументов устарела. В будущем аргумент будет интерпретироваться как строка вместо кода ASCII. В зависимости от предполагаемого поведения аргумент должен быть приведён к строке ( string ) или должен быть сделан явный вызов функции chr() .

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

Возвращает true , если каждый символ в строке text создаёт какое-то из пустое пространство, false в противном случае. Кроме пробела, сюда также входят символы табуляции, вертикальной табуляции, перевода строки, возврата каретки и перевода страницы. При вызове с пустой строкой результатом всегда будет false .

Примеры

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

$strings = array(
'string1' => "\n\r\t" ,
'string2' => "\narf12" ,
'string3' => '\n\r\t' // Обратите внимание, что кавычки одинарные
);
foreach ( $strings as $name => $testcase ) if ( ctype_space ( $testcase )) echo "Строка ' $name ' состоит только из пробельных символов.\n" ;
> else echo "Строка ' $name ' состоит не только из пробельных символов.\n" ;
>
>
?>

Результат выполнения данного примера:

Строка 'string1' состоит только из пробельных символов. Строка 'string2' состоит не только из пробельных символов. Строка 'string3' состоит не только из пробельных символов.

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

  • ctype_cntrl() - Проверяет наличие управляющих символов
  • ctype_graph() - Проверяет наличие любых печатных символов, кроме пробела
  • ctype_punct() - Проверяет наличие печатных символов, которые не содержат пробельные или буквенно-цифровые символы

User Contributed Notes 2 notes

A function I wrote last night was fairly flexible in terms of detecting whitespace, and even took into account the pesky non-breaking spaces / zero-width spaces further up the Unicode alphabet.

The benefit here was being able to isolate and identify specific Unicode indices based on their subrange.

// Returns TRUE if the ASCII value of $string matches a registered whitespace character.
// * This includes non-breaking spaces, zero-width spaces, and any unicode values below 32.
// * $string: Character to identify. If string extends past one character, the value
// is truncated and only the initial character is examined.
function is_whitespace ( $string ) <
// Return FALSE if passed an empty string.
if( $string == "" ) return FALSE ;

// Additional Characters
switch( $char ) <
case 160 : // Non-Breaking Space
case 8287 : // Medium Mathematical Space
return TRUE ;
break;
>
return FALSE ;
>
?>

thanks to gardnerjohng, but a had some problems with non-breaking spaces in this function.

I added 2 more cases for this:
case 0xC2
case 0xA0

After this modification non-breaking spaces in my test code were successfully detected.

Источник

ctype_space

Проверяет, все ли символы в переданной строке text являются пробельными.

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

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

Возвращает TRUE , если каждый символ в строке text создает какой-нибудь из пробельных символов, FALSE в противном случае. Кроме пробела, сюда также относятся символы табуляции, вертикальной табуляции, перевода строки, возврата каретки и перевода страницы.

Примеры

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

$strings = array( 'string1' => "\n\r\t" , 'string2' => "\narf12" , 'string3' => '\n\r\t' );
foreach ( $strings as $name => $testcase ) if ( ctype_space ( $testcase )) echo "Строка ' $name ' состоит только из пробельных символов.\n" ;
> else echo "Строка ' $name ' не состоит только из пробельных символов.\n" ;
>
>
?>

Результат выполнения данного примера:

Строка 'string1' состоит только из пробельных символов. Строка 'string2' не состоит только из пробельных символов. Строка 'string3' не состоит только из пробельных символов.

Примечания

Замечание:

Если передан integer в диапазоне между -128 и 255 включительно, то он будет обработан как ASCII-код одного символа (к отрицательным значениям будет прибавлено 256 для возможности представления символов из расширенного диапазона ASCII). Любое другое целое число будет обработано как строка, содержащая десятичные цифры этого числа.

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

  • ctype_cntrl() - Проверяет на наличие управляющих символов
  • ctype_graph() - Проверяет наличие всех печатных символов, кроме пробела
  • ctype_punct() - Проверяет на наличие печатных символов, которые в то же время не являются пробельными или буквенно-цифровыми символами

Источник

Как проверить, есть ли в PHP только пробелы в строке?

Ваши две попытки даже не имеют смысла, равно как и ваши результаты. Обрезка этой первой строки должна привести к пустой строке (длина 0). preg_replace предназначен для замены строк, а не для проверки их существования.

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

Ваш код не содержит то же самое, что вы опубликовали здесь, проверенная строка в коде в вашем zip-файле: `| , which should evaluate to 1 , not 9`.

@bruce bruce, нет, я не загружал и не выполнял твой код (что я редко делаю), и я не буду этого делать. Я выполнил то, что вы опубликовали, который печатает 0 , как уже говорилось.

У вас есть дополнительный символ в вашем коде, и это проблема (и именно поэтому важно смотреть на источник в проблемах с юникодом, Барт), я обновил свой ответ этим.

@pablasso: нет, я не согласен. Я не должен быть тем, кто просматривает содержимое какого-то zip-файла, размещенного где-то еще. Брюс должен опубликовать соответствующую часть своего неработающего кода здесь на SO.

Я не понимаю, почему вы не можете опубликовать это. Копировать-вставить не работает? Если вы имеете в виду, что код слишком длинный, просто скопируйте и вставьте соответствующую часть.

9 ответов

mb_language('uni'); mb_internal_encoding('UTF-8'); $s = ' '; if (strlen(preg_replace('/\s+/u','',$s)) == 0)

Если это не работает, я предлагаю сделать это

$s = ' '; if (strlen(trim(preg_replace('/\xc2\xa0/',' ',$s))) == 0)

Эти решения были протестированы на разных платформах.

Символ - это неразрывное пространство C2A0 и может быть сгенерировано с помощью alt + 0160.

в вашем коде был один неразрывный пробел, но preg_replace преобразовал бы их все в обычный пробел, а затем обрезка могла бы позаботиться об этом.

Может быть, вы делаете что-то еще, что испортило результаты? Ваш тест возвращает 0

И что ожидаемое поведение trim.

  • "(ASCII 32 (0x20)), обычное пространство.
  • " \ t "(ASCII 9 (0x09)), вкладка.
  • " \n "(ASCII 10 (0x0A)), новая строка (строка).
  • " \ r "(ASCII 13 (0x0D)), возврат каретки.
  • " \ 0 "(ASCII 0 (0x00)), NUL-байт.
  • " \ x0B" (ASCII 11 (0x0B)), вертикальная вкладка.

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

Это вывод hexdump -C

$ hexdump -C space.php 00000000 3c 3f 0d 0a 70 72 69 6e 74 5f 72 28 73 74 72 6c || 00000026 

И это результат od, только с этим символом в файле.

$ od space.php 0000000 120302 0000002 

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

О, и чтобы ответить на ваш обновленный вопрос, просто используйте empty, как сказал Питер.

Источник

PHP - Найти, если строка содержит только пробелы и ничего больше

Как узнать, содержит ли строка только ТОЛЬКО пробелы и ничего больше? Число таких пространств не имеет значения.

if () // $string contains ONLY whitespaces and nothing else < // do something >

Лучшее, если может предоставить решение, которое может быть обобщено для любого персонажа: Как найти, содержит ли строка только один символ и ничего больше

Когда ответ решит вашу проблему, вы должны принять его. Если вы решили вопрос самостоятельно, вы должны опубликовать ответ, чтобы помочь будущим пользователям. У вас есть ряд вопросов без принятых ответов. Если вы не знакомы с принятием, см. Meta.stackexchange.com/questions/5234/… .

6 ответов

Нерегрессионный подход может быть:

if(strlen($string) >= 1 && empty(trim($string)))  

empty(trim($string)) удаляет все пробелы, а затем проверяет, является ли строка пустой. strlen($string) >= 1 подтверждает, что строка не была пуста для начала. Если пустые строки также допускаются, чтобы проверка могла быть удалена.

Полезная информация о пробелах:

" " (ASCII 32 (0x20)), an ordinary space. "\t" (ASCII 9 (0x09)), a tab. "\n" (ASCII 10 (0x0A)), a new line (line feed). "\r" (ASCII 13 (0x0D)), a carriage return. "\0" (ASCII 0 (0x00)), the NUL-byte. "\x0B" (ASCII 11 (0x0B)), a vertical tab. 

вероятно, прав (мнение), но OP сказал «пробел и ничего больше», в то время как ваша тестовая строка содержит что-то еще.

Да, я знаю, но это не так. ОП не очень точно определил, почему и почему этот вопрос, и я ничего не имею в виду, а просто буквально разбираюсь в этом вопросе. Для меня, хотя некоторые могут считать, что куча непробельных символов - это пробелы, я не думаю.

@ YvesLeBorg, поэтому наши ответы иногда должны быть не просто «голыми», а уроками в некоторой степени

@RomanPerekhrest Я также подумал, что стоит упомянуть, что это также может удовлетворить запрос OP «решение, которое можно обобщить на любой символ», используя параметр маски символов в trim .

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

Это выражение проверяет, что строка содержит только символы пробела или вообще ничего. Чтобы исключить пустые строки, используйте /^\s+$/ .

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

Если вы хотите проверить отдельные пробелы, используйте соответствующие escape-последовательности:

Вы можете узнать больше о regex по ссылке

Есть два способа достичь этого: быстрый и грязный и верный; Быстрый способ - запустить каждый символ в $ string и проверить его:

Итак, если $ is_space имеет значение true, то ваша строка содержит только пробелы;

Второй способ - это регулярное выражение, вам нужно немного углубиться в http://php.net/manual/ru/function.preg-match.php, и вам нужно такое регулярное выражение

если вы не можете найти что-то, что не является пробелом - чем вы имеете в этой строке только пробелы.

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

Источник

Читайте также:  Произвольный html что это
Оцените статью