Intereting Posts

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

print_r(strlen(trim(' '))); 

результат – 9

Я также пробовал

 preg_replace('/[\n\r\t\s]/', '', ' ') 

но результат не равен нулю.

Загрузите мой код, и вы получите результат

http://blog.eood.cn/attachment.php?id=70

 mb_language('uni'); mb_internal_encoding('UTF-8'); $s = '    '; if (strlen(preg_replace('/\s+/u','',$s)) == 0) { echo "String is empty.\n"; } 

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

 $s = ' '; if (strlen(trim(preg_replace('/\xc2\xa0/',' ',$s))) == 0) { echo "String is empty.\n"; } 

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

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

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

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

 print_r(strlen(trim(' '))); 

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

Эта функция возвращает строку с пробелом, разделенным с начала и конца строки. Без второго параметра 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 |<?..print_r(strl| 00000010 65 6e 28 74 72 69 6d 28 27 20 c2 a0 20 27 29 29 |en(trim(' .. '))| 00000020 29 3b 0d 0a 3f 3e |);..?>| 00000026 

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

 $ od space.php 0000000 120302 0000002 

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

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

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

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

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

 if(preg_match('/^\s+$/', $str)) == 1){ die('there are only spaces!'); } 

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

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

 if(strpos($string, ' ') !== false) echo $string.' contains a space'; 

Как насчет этого …

 $str = preg_replace('/\s\s+/', '', $str); 

Или это…

 $str = str_replace(array("\n", "\r", "\t", " ", "\o", "\xOB"), '', $str); 
 if(strlen(trim($_POST['foobar'])) == 0){ die('the user didn\'t input anything!'); } 

empty тоже

как

 $bar = trim($_POST['foobar']); if(empty($bar)){ die('the user didn\'t input anything!'); } 

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

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