Как проверить, есть ли в PHP только пробелы в строке? - PullRequest
6 голосов
/ 18 ноября 2009
print_r(strlen(trim('     ')));

результат 9

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

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

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

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

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

Ответы [ 9 ]

12 голосов
/ 18 ноября 2009
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.

3 голосов
/ 18 ноября 2009

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

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

И это ожидаемое поведение 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)), вертикальная табуляция.

UPDATE:

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

Это вывод 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 не удалит этот пробел, потому что ... ну, это не пробел. Это хорошая справка о том, как находить необычных персонажей.

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

2 голосов
/ 18 ноября 2009

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

if(preg_match('/^\s+$/', $str)) == 1){
 die('there are only spaces!');
}
2 голосов
/ 18 ноября 2009

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

# Check if string consists of only spaces
if (ltrim($string, ' ') === '') {
0 голосов
/ 23 декабря 2009

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

$ var1 = string ($ var) а потом отделка (var1 $) .

0 голосов
/ 18 ноября 2009
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!');
}
0 голосов
/ 18 ноября 2009

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

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

Или это ...

$str = str_replace(array("\n", "\r", "\t", " ", "\o", "\xOB"), '', $str);
0 голосов
/ 18 ноября 2009

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

if(strpos($string, ' ') !== false) echo $string.' contains a space';
0 голосов
/ 18 ноября 2009

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

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