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

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

результат-9

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

preg_replace('/[nrts]/', '', '   ')

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

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

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

9 ответов


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.


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

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

и это ожидаемое поведение отделка.

эта функция возвращает строку с пробелы, снятые с самого начала и конец str . Без второго параметр, trim () очистит эти персонажи:

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

обновление:

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

это выход 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!');
}

Если обрезка ($var) не работает, тогда $var может быть не строкой. Итак, сначала бросьте в строку

$var1 = строка ($var) и обрезка ($var1).